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