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

View File

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

View File

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

View File

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

View File

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