Dwayne Harris 5 years ago
parent
commit
c6032a8c09
  1. 2
      src/lib/util.ts
  2. 4
      src/plugins/api/authentication.ts
  3. 3
      src/plugins/api/index.ts
  4. 26
      src/plugins/api/posts.ts
  5. 2
      src/types/collections.ts

2
src/lib/util.ts

@ -8,5 +8,5 @@ export function trimContent(content: string, length: number = 128): string {
}
export function createPostId(): string {
return 'p' + v1().replace('/-/g', '')
return 'p' + v1().replace(/-/g, '')
}

4
src/plugins/api/authentication.ts

@ -90,6 +90,8 @@ function registerRoute(server: FastifyInstance<Server, IncomingMessage, ServerRe
installations: [],
status: 'default',
points: 0,
followerCount: 0,
followingCount: 0,
about: '',
created: Date.now(),
}
@ -204,7 +206,7 @@ function refreshRoute(server: FastifyInstance<Server, IncomingMessage, ServerRes
return badRequestError(reply, 'Invalid token')
}
const container = await containerFor(server.database.client, 'User')
const container = await containerFor(server.database.client, 'Users')
const tokenItem = await container.item(request.body.refresh, userId)
if (!tokenItem) return badRequestError(reply, 'Invalid refresh token')

3
src/plugins/api/index.ts

@ -3,10 +3,10 @@ import { Plugin } from 'fastify'
import { Server, IncomingMessage, ServerResponse } from 'http'
import { JWT } from '../../lib/crypto'
import { containerFor } from '../../lib/database'
import { tokenFromHeader } from '../../lib/http'
import authentication from './authentication'
import posts from './posts'
import profile from './profile'
interface IDatabase {
@ -59,6 +59,7 @@ const plugin: Plugin<Server, IncomingMessage, ServerResponse, PluginOptions> = a
})
server.register(authentication)
server.register(posts)
server.register(profile)
}

26
src/plugins/api/posts.ts

@ -39,9 +39,9 @@ function postRoute(server: fastify.FastifyInstance<Server, IncomingMessage, Serv
type: 'object',
required: ['date'],
properties: {
imageUrl: 'string',
text: 'string',
date: 'number',
imageUrl: { type: 'string' },
text: { type: 'string' },
date: { type: 'number' },
},
},
attachments: {
@ -50,9 +50,9 @@ function postRoute(server: fastify.FastifyInstance<Server, IncomingMessage, Serv
type: 'object',
required: ['imageUrl'],
properties: {
imageUrl: 'string',
caption: 'string',
cover: 'string',
imageUrl: { type: 'string' },
caption: { type: 'string' },
cover: { type: 'string' },
},
},
},
@ -77,7 +77,7 @@ function postRoute(server: fastify.FastifyInstance<Server, IncomingMessage, Serv
const postContainer = await containerFor(server.database.client, 'Posts')
const postRelationshipContainer = await containerFor(server.database.client, 'PostRelationships')
const userContainer = await containerFor(server.database.client, 'User')
const userContainer = await containerFor(server.database.client, 'Users')
const postId = createPostId()
@ -89,12 +89,13 @@ function postRoute(server: fastify.FastifyInstance<Server, IncomingMessage, Serv
const parentRelationshipItem = postRelationshipContainer.item(request.body.parent, parent.root)
const { resource: parentRelationship } = await parentRelationshipItem.read<IPostRelationship>()
const parents = parentRelationship ? parentRelationship.parents : []
newPostRelationship = {
id: postId,
partitionKey: parent.root,
parents: [
...parentRelationship.parents,
...parents,
parent.id,
]
}
@ -121,9 +122,10 @@ function postRoute(server: fastify.FastifyInstance<Server, IncomingMessage, Serv
await postContainer.items.create<IPost>(post)
await userContainer.items.create<IUserPost>(userPost)
await postRelationshipContainer.items.create<IPostRelationship>(newPostRelationship)
const query = createQuerySpec(`SELECT u.id FROM Users u WHERE u.partitionKey = @partitionKey AND type = 'follow'`, { partitionKey: request.user.id })
if (newPostRelationship) await postRelationshipContainer.items.create<IPostRelationship>(newPostRelationship)
const query = createQuerySpec(`SELECT u.id FROM Users u WHERE u.partitionKey = @partitionKey AND u.type = 'follow'`, { partitionKey: request.user.id })
const { resources: followers } = await userContainer.items.query<IUserFollow>(query, {}).fetchAll()
if (followers.length < 500) {
@ -136,6 +138,10 @@ function postRoute(server: fastify.FastifyInstance<Server, IncomingMessage, Serv
})
}
}
return {
id: postId,
}
})
}

2
src/types/collections.ts

@ -21,6 +21,8 @@ export interface IUser {
installations: IInstallation[]
status: IAccountStatus
points: number
followerCount: number
followingCount: number
about: string
created: number // Timestamp
}

Loading…
Cancel
Save