Return ITeam[] from /my/teams

This commit is contained in:
Jerko Steiner 2019-03-20 11:15:49 +05:00
parent 46e56b7ad4
commit 7a0d44abe4
5 changed files with 57 additions and 25 deletions

View File

@ -1,7 +1,6 @@
import {ICredentials} from './ICredentials' import {ICredentials} from './ICredentials'
import {INewUser} from './INewUser' import {INewUser} from './INewUser'
import {ITeam} from './ITeam' import {ITeam} from './ITeam'
import {IUserTeam} from './IUserTeam'
import {IUser} from './IUser' import {IUser} from './IUser'
import {IUserInTeam} from './IUserInTeam' import {IUserInTeam} from './IUserInTeam'
@ -86,18 +85,30 @@ export interface IAPIDef {
teamId: number teamId: number
userId: number userId: number
} }
// body: {
// roleId: number
// }
response: IUserInTeam
} }
delete: { delete: {
params: { params: {
teamId: number teamId: number
userId: number userId: number
} }
// body: {
// roleId: number
// }
response: {
teamId: number
userId: number
// roleId: number
}
} }
} }
'/my/teams': { '/my/teams': {
get: { get: {
response: IUserTeam[] response: ITeam[]
} }
} }

View File

@ -1,5 +1,4 @@
import {Team} from '../entities/Team' import {Team} from '../entities/Team'
import {UserTeam} from '../entities/UserTeam'
import {IUserTeamParams} from './IUserTeamParams' import {IUserTeamParams} from './IUserTeamParams'
import {IUserInTeam} from '@rondo/common' import {IUserInTeam} from '@rondo/common'
@ -10,13 +9,13 @@ export interface ITeamService {
update(params: {id: number, name: string, userId: number}): Promise<Team> update(params: {id: number, name: string, userId: number}): Promise<Team>
addUser(params: IUserTeamParams): Promise<UserTeam> addUser(params: IUserTeamParams): Promise<IUserInTeam>
removeUser(params: IUserTeamParams): Promise<void> removeUser(params: IUserTeamParams): Promise<void>
findOne(id: number): Promise<Team | undefined> findOne(id: number): Promise<Team | undefined>
find(userId: number): Promise<UserTeam[]> find(userId: number): Promise<Team[]>
findUsers(teamId: number): Promise<IUserInTeam[]> findUsers(teamId: number): Promise<IUserInTeam[]>

View File

@ -73,7 +73,7 @@ describe('team', () => {
const response = await t const response = await t
.get('/my/teams') .get('/my/teams')
.expect(200) .expect(200)
expect(response.body.map(ut => ({teamId: ut.teamId}))) expect(response.body.map(myTeam => ({teamId: myTeam.id})))
.toContainEqual({ .toContainEqual({
teamId: team.id, teamId: team.id,
}) })

View File

@ -84,7 +84,7 @@ export class TeamRoutes extends BaseRoute<IAPIDef> {
userId: req.user!.id, userId: req.user!.id,
}) })
await this.teamService.addUser({ return this.teamService.addUser({
userId, userId,
teamId, teamId,
roleId: 1, // TODO customize roles roleId: 1, // TODO customize roles
@ -105,6 +105,8 @@ export class TeamRoutes extends BaseRoute<IAPIDef> {
userId, userId,
roleId: 1, // TODO customzie roles roleId: 1, // TODO customzie roles
}) })
return {teamId, userId}
}) })
} }

View File

@ -1,5 +1,6 @@
import {BaseService} from '../services/BaseService' import {BaseService} from '../services/BaseService'
import {ITeamService} from './ITeamService' import {ITeamService} from './ITeamService'
import {IUserInTeam} from '@rondo/common'
import {IUserTeamParams} from './IUserTeamParams' import {IUserTeamParams} from './IUserTeamParams'
import {Team} from '../entities/Team' import {Team} from '../entities/Team'
import {UserTeam} from '../entities/UserTeam' import {UserTeam} from '../entities/UserTeam'
@ -44,8 +45,18 @@ export class TeamService extends BaseService implements ITeamService {
async addUser(params: IUserTeamParams) { async addUser(params: IUserTeamParams) {
const {userId, teamId, roleId} = params const {userId, teamId, roleId} = params
return this.getRepository(UserTeam) await this.getRepository(UserTeam)
.save({userId, teamId, roleId}) .save({userId, teamId, roleId})
const userTeam = await this.createFindUserInTeamQuery()
.where({
userId,
teamId,
roleId,
})
.getOne()
return this.mapUserInTeam(userTeam!)
} }
async removeUser({teamId, userId, roleId}: IUserTeamParams) { async removeUser({teamId, userId, roleId}: IUserTeamParams) {
@ -55,23 +66,13 @@ export class TeamService extends BaseService implements ITeamService {
} }
async findUsers(teamId: number) { async findUsers(teamId: number) {
const userTeams = await this.getRepository(UserTeam) const userTeams = await this.createFindUserInTeamQuery()
.createQueryBuilder('ut')
.select('ut')
.innerJoinAndSelect('ut.user', 'user')
.innerJoinAndSelect('ut.role', 'role')
.where('ut.teamId = :teamId', { .where('ut.teamId = :teamId', {
teamId, teamId,
}) })
.getMany() .getMany()
return userTeams.map(ut => ({ return userTeams.map(this.mapUserInTeam)
teamId,
userId: ut.userId,
displayName: `${ut.user.firstName} ${ut.user.lastName}`,
roleId: ut.role!.id,
roleName: ut.role!.name,
}))
} }
async findOne(id: number) { async findOne(id: number) {
@ -79,11 +80,30 @@ export class TeamService extends BaseService implements ITeamService {
} }
async find(userId: number) { async find(userId: number) {
// TODO find all teams via UserTeam instead of userId return this.getRepository(Team)
return this.getRepository(UserTeam).find({ .createQueryBuilder('team')
relations: ['team'], .select('team')
where: {userId}, .innerJoin('team.userTeams', 'ut')
}) .where('ut.userId = :userId', {userId})
.getMany()
}
protected createFindUserInTeamQuery() {
return this.getRepository(UserTeam)
.createQueryBuilder('ut')
.select('ut')
.innerJoinAndSelect('ut.user', 'user')
.innerJoinAndSelect('ut.role', 'role')
}
protected mapUserInTeam(ut: UserTeam): IUserInTeam {
return {
teamId: ut.teamId,
userId: ut.userId,
displayName: `${ut.user.firstName} ${ut.user.lastName}`,
roleId: ut.role!.id,
roleName: ut.role!.name,
}
} }
} }