Return ITeam[] from /my/teams
This commit is contained in:
parent
46e56b7ad4
commit
7a0d44abe4
@ -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[]
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -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[]>
|
||||
|
||||
|
||||
@ -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,
|
||||
})
|
||||
|
||||
@ -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}
|
||||
})
|
||||
|
||||
}
|
||||
|
||||
@ -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,
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user