diff --git a/packages/common/src/IAPIDef.ts b/packages/common/src/IAPIDef.ts index ae526fb..12271f8 100644 --- a/packages/common/src/IAPIDef.ts +++ b/packages/common/src/IAPIDef.ts @@ -1,6 +1,9 @@ import {ICommentTree} from './ICommentTree' import {IComment} from './IComment' import {ICredentials} from './ICredentials' +import {ISite} from './ISite' +import {IStory} from './IStory' +import {ITeam} from './ITeam' import {IUser} from './IUser' export interface IAPIDef { @@ -33,7 +36,86 @@ export interface IAPIDef { } } } - '/story/:storyId/comments': { + + // TEAM + + '/teams': { + post: { + body: { + name: string + } + response: ITeam + } + } + + '/teams/:id': { + get: { + params: { + id: number + } + response: ITeam | undefined + } + } + + '/my/teams': { + get: { + response: ITeam[] + } + } + + // SITE + + '/sites/:domain': { + 'get': { + params: {domain: string} + } + } + + '/teams/:teamId/sites/:id': { + get: { + params: { + teamId: number + id: number + } + response: ISite | undefined + } + } + + '/teams/:teamId/sites': { + get: { + params: { + teamId: number + } + response: ISite[] + } + post: { + params: { + teamId: number + } + body: { + name: string + } + response: ISite + } + } + + '/my/sites': { + get: { + response: ISite[] + } + } + + // STORY + + '/stories/by-url': { + 'get': { + response: IStory | undefined + query: { + url: string + } + } + } + '/stories/:storyId/comments': { 'get': { response: ICommentTree, params: { diff --git a/packages/server/src/entities/Team.ts b/packages/server/src/entities/Team.ts index 79f498f..3e23825 100644 --- a/packages/server/src/entities/Team.ts +++ b/packages/server/src/entities/Team.ts @@ -7,7 +7,7 @@ import {User} from './User' @Entity() export class Team extends BaseEntity { @Column() - url!: string + name!: string @Column() @Index() diff --git a/packages/server/src/routes/CommentRoutes.ts b/packages/server/src/routes/CommentRoutes.ts index 33e9b7b..7cc70c8 100644 --- a/packages/server/src/routes/CommentRoutes.ts +++ b/packages/server/src/routes/CommentRoutes.ts @@ -14,14 +14,14 @@ export class CommentRoutes extends BaseRoute { setup(t: AsyncRouter) { - t.get('/story/:storyId/comments', async req => { + t.get('/stories/:storyId/comments', async req => { const {storyId} = req.params return this.commentService.find(storyId) }) t.use(ensureLoggedInApi) - t.post('/story/:storyId/comments', async req => { + t.post('/stories/:storyId/comments', async req => { const {storyId} = req.params const comment = req.body comment.storyId = storyId diff --git a/packages/server/src/routes/SiteRoutes.ts b/packages/server/src/routes/SiteRoutes.ts new file mode 100644 index 0000000..a4d324d --- /dev/null +++ b/packages/server/src/routes/SiteRoutes.ts @@ -0,0 +1,45 @@ +import {AsyncRouter} from '../router' +import {BaseRoute} from './BaseRoute' +import {IAPIDef} from '@rondo/common' +import {ISiteService} from '../services/ISiteService' +import {ensureLoggedInApi} from '../middleware' + +export class SiteRoutes extends BaseRoute { + constructor( + protected readonly siteService: ISiteService, + protected readonly t: AsyncRouter, + ) { + super(t) + } + + setup(t: AsyncRouter) { + + t.get('/sites/:domain', async req => { + const {domain} = req.params + return this.siteService.findByDomain(domain) + }) + + t.get('/teams/:teamId/sites/:id', async req => { + const {id, teamId} = req.params + return this.siteService.findOne(id, teamId) + }) + + t.get('/teams/:teamId/sites', async req => { + return this.siteService.findByTeam(req.params.teamId) + }) + + t.use(ensureLoggedInApi) + + t.get('/my/sites', async req => { + return this.siteService.findByUser(req.user!.id) + }) + + t.post('/teams/:teamId/sites', async req => { + const {name} = req.body + const {teamId} = req.params + return this.siteService.create(name, teamId, req.user!.id) + }) + + } + +} diff --git a/packages/server/src/routes/StoryRoutes.ts b/packages/server/src/routes/StoryRoutes.ts new file mode 100644 index 0000000..1db75e9 --- /dev/null +++ b/packages/server/src/routes/StoryRoutes.ts @@ -0,0 +1,23 @@ +import {AsyncRouter} from '../router' +import {BaseRoute} from './BaseRoute' +import {IAPIDef} from '@rondo/common' +import {IStoryService} from '../services/IStoryService' + +export class StoryRoutes extends BaseRoute { + constructor( + protected readonly storyService: IStoryService, + protected readonly t: AsyncRouter, + ) { + super(t) + } + + setup(t: AsyncRouter) { + + t.get('/stories/by-url', async req => { + const {url} = req.query + return this.storyService.findOne(url) + }) + + } + +} diff --git a/packages/server/src/routes/TeamRoutes.ts b/packages/server/src/routes/TeamRoutes.ts new file mode 100644 index 0000000..a82a35c --- /dev/null +++ b/packages/server/src/routes/TeamRoutes.ts @@ -0,0 +1,35 @@ +import {AsyncRouter} from '../router' +import {BaseRoute} from './BaseRoute' +import {IAPIDef} from '@rondo/common' +import {ITeamService} from '../services/ITeamService' +import {ensureLoggedInApi} from '../middleware' + +export class TeamRoutes extends BaseRoute { + constructor( + protected readonly teamService: ITeamService, + protected readonly t: AsyncRouter, + ) { + super(t) + } + + setup(t: AsyncRouter) { + + t.get('/teams/:id', async req => { + const {id} = req.params + return this.teamService.findOne(id, req.user!.id) + }) + + t.use(ensureLoggedInApi) + + t.get('/my/teams', async req => { + return this.teamService.find(req.user!.id) + }) + + t.post('/teams', async req => { + const {name} = req.body + return this.teamService.create(name, req.user!.id) + }) + + } + +} diff --git a/packages/server/src/services/ISiteService.ts b/packages/server/src/services/ISiteService.ts index fe05942..1010ceb 100644 --- a/packages/server/src/services/ISiteService.ts +++ b/packages/server/src/services/ISiteService.ts @@ -5,7 +5,9 @@ export interface ISiteService { findOne(id: number, teamId: number): Promise - find(userId: number): Promise + findByUser(userId: number): Promise + + findByTeam(teamId: number): Promise findByDomain(domain: string): Promise diff --git a/packages/server/src/services/SiteService.ts b/packages/server/src/services/SiteService.ts index 84fcdfa..c2d0186 100644 --- a/packages/server/src/services/SiteService.ts +++ b/packages/server/src/services/SiteService.ts @@ -29,7 +29,13 @@ export class SiteService extends BaseService implements ISiteService { }) } - async find(teamId: number) { + async findByUser(userId: number) { + return this.getRepository(Site).find({ + where: { userId }, + }) + } + + async findByTeam(teamId: number) { return this.getRepository(Site).find({ where: { teamId }, })