From 8865b58747a3c6b7b90cf939b1f880e4c3d3d525 Mon Sep 17 00:00:00 2001 From: Jerko Steiner Date: Tue, 22 Jan 2019 12:29:47 +0100 Subject: [PATCH] Add basic Site, Story and TeamService --- packages/common/src/IComment.ts | 1 + packages/common/src/ISite.ts | 6 ++++ packages/common/src/IStory.ts | 5 ++++ packages/common/src/ITeam.ts | 5 ++++ packages/common/src/index.ts | 2 ++ packages/server/src/entities/Site.ts | 6 ++-- packages/server/src/entities/Team.ts | 11 +++++++- packages/server/src/services/ISiteService.ts | 11 ++++++++ packages/server/src/services/IStoryService.ts | 7 +++++ packages/server/src/services/ITeamService.ts | 11 ++++++++ packages/server/src/services/SiteService.ts | 28 +++++++++++++++++++ packages/server/src/services/StoryService.ts | 10 +++++++ packages/server/src/services/TeamService.ts | 24 ++++++++++++++++ 13 files changed, 124 insertions(+), 3 deletions(-) create mode 100644 packages/common/src/ISite.ts create mode 100644 packages/common/src/IStory.ts create mode 100644 packages/common/src/ITeam.ts create mode 100644 packages/server/src/services/ISiteService.ts create mode 100644 packages/server/src/services/IStoryService.ts create mode 100644 packages/server/src/services/ITeamService.ts create mode 100644 packages/server/src/services/SiteService.ts create mode 100644 packages/server/src/services/StoryService.ts create mode 100644 packages/server/src/services/TeamService.ts diff --git a/packages/common/src/IComment.ts b/packages/common/src/IComment.ts index 5773b8d..259750d 100644 --- a/packages/common/src/IComment.ts +++ b/packages/common/src/IComment.ts @@ -1,4 +1,5 @@ export interface IComment { + // TODO make readonly id: number storyId: number message: string diff --git a/packages/common/src/ISite.ts b/packages/common/src/ISite.ts new file mode 100644 index 0000000..e18f812 --- /dev/null +++ b/packages/common/src/ISite.ts @@ -0,0 +1,6 @@ +export interface ISite { + readonly id: number + readonly name: string + readonly teamId: number + readonly userId: number +} diff --git a/packages/common/src/IStory.ts b/packages/common/src/IStory.ts new file mode 100644 index 0000000..dfd9d32 --- /dev/null +++ b/packages/common/src/IStory.ts @@ -0,0 +1,5 @@ +export interface IStory { + readonly id: number + readonly url: string + readonly siteId: number +} diff --git a/packages/common/src/ITeam.ts b/packages/common/src/ITeam.ts new file mode 100644 index 0000000..b82b4fb --- /dev/null +++ b/packages/common/src/ITeam.ts @@ -0,0 +1,5 @@ +export interface ITeam { + readonly id: number + readonly name: string + readonly userId: number +} diff --git a/packages/common/src/index.ts b/packages/common/src/index.ts index 7f59612..d4f820e 100644 --- a/packages/common/src/index.ts +++ b/packages/common/src/index.ts @@ -3,4 +3,6 @@ export * from './IComment' export * from './ICommentTree' export * from './ICredentials' export * from './IRoutes' +export * from './ISite' export * from './IUser' +import * from './ITeam' diff --git a/packages/server/src/entities/Site.ts b/packages/server/src/entities/Site.ts index 7fdc69a..f8f1ad9 100644 --- a/packages/server/src/entities/Site.ts +++ b/packages/server/src/entities/Site.ts @@ -1,5 +1,5 @@ import {BaseEntity} from './BaseEntity' -import {Column, Entity, ManyToOne, OneToMany} from 'typeorm' +import {Column, Entity, Index, ManyToOne, OneToMany} from 'typeorm' import {User} from './User' import {Story} from './Story' import {Team} from './Team' @@ -9,15 +9,17 @@ export class Site extends BaseEntity { @Column() name!: string - @Column() + @Column({ unique: true }) domain!: string + @Index() @Column() userId!: number @ManyToOne(type => User, user => user.sites) user?: User + @Index() @Column() teamId!: number diff --git a/packages/server/src/entities/Team.ts b/packages/server/src/entities/Team.ts index 73ad35b..79f498f 100644 --- a/packages/server/src/entities/Team.ts +++ b/packages/server/src/entities/Team.ts @@ -1,13 +1,22 @@ import {BaseEntity} from './BaseEntity' -import {Column, Entity, OneToMany} from 'typeorm' +import {Column, Entity, OneToMany, ManyToOne, Index} from 'typeorm' import {Site} from './Site' import {UserTeam} from './UserTeam' +import {User} from './User' @Entity() export class Team extends BaseEntity { @Column() url!: string + @Column() + @Index() + userId!: number + + @ManyToOne(type => User) + @Column() + user?: User + @OneToMany(type => Site, site => site.team) sites!: Site[] diff --git a/packages/server/src/services/ISiteService.ts b/packages/server/src/services/ISiteService.ts new file mode 100644 index 0000000..6af62e9 --- /dev/null +++ b/packages/server/src/services/ISiteService.ts @@ -0,0 +1,11 @@ +import {ISite} from '@rondo/common' + +export interface ISiteService { + create(name: string, teamId: number, userId: number): Promise + + findOne(id: number, teamId: number): Promise + + find(userId: number): Promise + + // TODO add other methods +} diff --git a/packages/server/src/services/IStoryService.ts b/packages/server/src/services/IStoryService.ts new file mode 100644 index 0000000..fe74028 --- /dev/null +++ b/packages/server/src/services/IStoryService.ts @@ -0,0 +1,7 @@ +import {Story} from '../entities/Story' + +export interface IStoryService { + findOne(url: string): Promise + + // TODO add other methods +} diff --git a/packages/server/src/services/ITeamService.ts b/packages/server/src/services/ITeamService.ts new file mode 100644 index 0000000..1f6f2c9 --- /dev/null +++ b/packages/server/src/services/ITeamService.ts @@ -0,0 +1,11 @@ +import {Team} from '../entities/Team' + +export interface ITeamService { + create(name: string, userId: number): Promise + + findOne(id: number, userId: number): Promise + + find(userId: number): Promise + + // TODO add other methods +} diff --git a/packages/server/src/services/SiteService.ts b/packages/server/src/services/SiteService.ts new file mode 100644 index 0000000..3d20fab --- /dev/null +++ b/packages/server/src/services/SiteService.ts @@ -0,0 +1,28 @@ +import {BaseService} from './BaseService' +import {ISiteService} from './ISiteService' +import {Site} from '../entities/Site' + +export class SiteService extends BaseService implements ISiteService { + async create(name: string, teamId: number, userId: number) { + return this.getRepository(Site).save({ + name, + teamId, + userId, + }) + } + + findOne(id: number, teamId: number) { + return this.getRepository(Site).findOne({ + where: { + id, + teamId, + }, + }) + } + + async find(teamId: number) { + return this.getRepository(Site).find({ + where: { teamId }, + }) + } +} diff --git a/packages/server/src/services/StoryService.ts b/packages/server/src/services/StoryService.ts new file mode 100644 index 0000000..35ab8ee --- /dev/null +++ b/packages/server/src/services/StoryService.ts @@ -0,0 +1,10 @@ +import {IStoryService} from './IStoryService' +import {Story} from '../entities/Story' +import URL from 'url' + +export class StoryService implements IStoryService { + async findOne(url: string) { + const parsedUrl = URL.parse(url) + const hostname = parsedUrl.hostname + } +} diff --git a/packages/server/src/services/TeamService.ts b/packages/server/src/services/TeamService.ts new file mode 100644 index 0000000..f217bb1 --- /dev/null +++ b/packages/server/src/services/TeamService.ts @@ -0,0 +1,24 @@ +import {BaseService} from './BaseService' +import {ITeamService} from './ITeamService' +import {Team} from '../entities/Team' + +export class TeamService extends BaseService implements ITeamService { + async create(name: string, userId: number) { + return this.getRepository(Team).save({ + name, + userId, + }) + } + + findOne(id: number) { + return this.getRepository(Team).findOne(id) + } + + find(userId: number) { + // TODO find all teams via UserTeam instead of userId + return this.getRepository(Team).find({ + where: { userId }, + }) + } + +}