Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,9 @@ export class CafeteriaDiet {
@PrimaryGeneratedColumn({ name: 'diet_id' })
id: number;

@Column({ name: 'cafeteria_id' })
cafeteriaId: number;

@Column()
date: Date;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,9 @@ export class Cafeteria {
@PrimaryGeneratedColumn()
id: number;

@Column({ name: 'campus_id' })
campusId: number;

@Column({ name: 'cafeteria_name_ko' })
name: string;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ export class CafeteriasRepository {
private readonly cafeteriaDietRepository: Repository<CafeteriaDiet>,
) {}

findCafeteriasByCampusId(campusId = 1): Promise<Cafeteria[]> {
findCafeteriasByCampusId(campusId: number): Promise<Cafeteria[]> {
return this.cafeteriaRepository.find({
where: {
campus: {
Expand All @@ -24,16 +24,21 @@ export class CafeteriasRepository {
order: {
name: 'ASC',
},
relations: ['campus'],
relations: {
campus: true,
},
});
}

findCafeteriaById(cafeteriaId: number): Promise<Cafeteria | null> {
return this.cafeteriaRepository
.createQueryBuilder('cafeteria')
.leftJoinAndSelect('cafeteria.campus', 'campus')
.where('cafeteria.id = :cafeteriaId', { cafeteriaId })
.getOne();
return this.cafeteriaRepository.findOne({
where: {
id: cafeteriaId,
},
relations: {
campus: true,
},
});
}

/**
Expand All @@ -47,12 +52,17 @@ export class CafeteriasRepository {
date: Date,
time: DietTime,
): Promise<CafeteriaDiet[]> {
return this.cafeteriaDietRepository
.createQueryBuilder('diet')
.select(['diet.dishCategory', 'diet.dishType', 'diet.dishName'])
.where('diet.date = :date', { date })
.andWhere('diet.cafeteria_id = :cafeteriaId', { cafeteriaId })
.andWhere('diet.time = :time', { time })
.getMany();
return this.cafeteriaDietRepository.find({
select: {
dishCategory: true,
dishType: true,
dishName: true,
},
where: {
date,
cafeteriaId,
time,
},
});
}
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { ListCardConfig } from 'src/api/common/utils/constants';
import { Repository } from 'typeorm';
import { Not, Repository } from 'typeorm';
import { College } from 'src/api/public/colleges/domain/entities/college.entity';

@Injectable()
Expand All @@ -12,12 +12,17 @@ export class CollegesRepository {
) {}

findAll(page: number): Promise<[College[], number]> {
return this.collegesRepository
.createQueryBuilder('college')
.where("college.name != '공통'")
.orderBy('college.name', 'ASC')
.take(ListCardConfig.LIMIT)
.skip(ListCardConfig.LIMIT * (page - 1))
.getManyAndCount();
const limit = ListCardConfig.LIMIT;

return this.collegesRepository.findAndCount({
where: {
name: Not('공통'),
},
order: {
name: 'ASC',
},
take: limit,
skip: limit * (page - 1),
});
Comment thread
JangDongHo marked this conversation as resolved.
Resolved
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,13 @@ export class DepartmentsService {
},
})
public async findAll(collegeId: number, page: number): Promise<DepartmentListResult> {
const [departments, total] = await this.departmentsRepository.findByCollegeId(collegeId, page);
const safePage = Math.max(page, 1);

const [departments, total] = await this.departmentsRepository.findByCollegeId(
collegeId,
safePage,
);

return {
departments: departments.map(department => ({
id: department.id,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,9 @@ export class Department {
@PrimaryGeneratedColumn()
id: number;

@Column({ name: 'college_id' })
collegeId: number;

@Column({ name: 'department_ko' })
name: string;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,14 +12,17 @@ export class DepartmentsRepository {
) {}

findByCollegeId(collegeId: number, page: number): Promise<[Department[], number]> {
return this.departmentsRepository
.createQueryBuilder('department')
.where('department.college_id = :collegeId', {
const limit = ListCardConfig.LIMIT;

return this.departmentsRepository.findAndCount({
where: {
collegeId,
})
.orderBy('department.name', 'ASC')
.take(ListCardConfig.LIMIT)
.skip(ListCardConfig.LIMIT * (page - 1))
.getManyAndCount();
},
order: {
name: 'ASC',
},
take: limit,
skip: limit * (page - 1),
});
}
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { NoticeCategory } from 'src/api/public/notices/domain/entities/notice-category.entity';
import { Repository } from 'typeorm';
import { In, Repository } from 'typeorm';

@Injectable()
export class NoticeCategoriesRepository {
Expand Down Expand Up @@ -54,11 +54,12 @@ export class NoticeCategoriesRepository {
departmentId: number,
categoryNames: string[],
): Promise<NoticeCategory[]> {
return this.noticeCategoryRepository
.createQueryBuilder('category')
.where('category.department_id = :departmentId', { departmentId })
.andWhere('category.category IN (:...categoryNames)', { categoryNames })
.getMany();
return this.noticeCategoryRepository.find({
where: {
departmentId,
category: In(categoryNames),
},
});
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ import { UsersRepository } from 'src/api/public/users/infrastructure/users.repos
const makeUser = (overrides: Partial<User> = {}): User =>
({
id: 'kakao-user-id',
campusId: 1,
departmentId: 10,
campus: { id: 1, name: '가좌캠퍼스' } as any,
department: {
id: 10,
Expand Down Expand Up @@ -61,16 +63,22 @@ describe('UsersService', () => {

describe('upsert', () => {
it('userId와 campusId, departmentId로 사용자 학과 정보를 저장한다', async () => {
const user = makeUser();
const user = makeUser({ campusId: 2, departmentId: 20 });
usersRepository.save.mockResolvedValue(user);

const result = await service.upsert('kakao-user-id', 1, 10);
const result = await service.upsert('kakao-user-id', 2, 20);

expect(usersRepository.save).toHaveBeenCalledWith('kakao-user-id', 1, 10);
expect(usersRepository.save).toHaveBeenCalledWith(
expect.objectContaining({
id: 'kakao-user-id',
campusId: 2,
departmentId: 20,
}),
);
expect(result).toEqual({
userId: user.id,
campusId: user.campus.id,
departmentId: user.department.id,
campusId: user.campusId,
departmentId: user.departmentId,
});
});
});
Expand Down
15 changes: 10 additions & 5 deletions services/api/app/src/api/public/users/application/users.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import { UsersRepository } from 'src/api/public/users/infrastructure/users.repos
export class UsersService {
constructor(private readonly usersRepository: UsersRepository) {}

public findOne(userId: string): Promise<User> {
public findOne(userId: string): Promise<User | null> {
return this.usersRepository.findOne(userId);
}

Expand All @@ -32,11 +32,16 @@ export class UsersService {
campusId: number,
departmentId: number,
): Promise<UpsertDepartmentResult> {
const user = await this.usersRepository.save(userId, campusId, departmentId);
const user = new User();

user.updateProfile(userId, campusId, departmentId);

const userResult = await this.usersRepository.save(user);

return {
userId: user.id,
campusId: user.campus.id,
departmentId: user.department.id,
userId: userResult.id,
campusId: userResult.campusId,
departmentId: userResult.departmentId,
};
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { Entity, JoinColumn, ManyToOne, PrimaryColumn } from 'typeorm';
import { Column, Entity, JoinColumn, ManyToOne, PrimaryColumn } from 'typeorm';
import { Campus } from 'src/api/public/campuses/domain/entities/campus.entity';
import { Department } from 'src/api/public/departments/domain/entities/department.entity';

Expand All @@ -7,11 +7,23 @@ export class User {
@PrimaryColumn()
id: string;

@Column({ name: 'campus_id' })
campusId: number;

@Column({ name: 'department_id' })
departmentId: number;

@ManyToOne(() => Campus, campus => campus.users)
@JoinColumn({ name: 'campus_id' })
campus: Campus;

@ManyToOne(() => Department, department => department.users)
@JoinColumn({ name: 'department_id' })
department: Department;

updateProfile(userId: string, campusId: number, departmentId: number) {
this.id = userId;
this.campusId = campusId;
this.departmentId = departmentId;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,21 +10,21 @@ export class UsersRepository {
private readonly usersRepository: Repository<User>,
) {}

save(userId: string, campusId: number, departmentId: number): Promise<User> {
return this.usersRepository.save({
id: userId,
campus: { id: campusId },
department: { id: departmentId },
});
save(user: Partial<User>): Promise<User> {
return this.usersRepository.save(user);
}

findOne(userId: string): Promise<User> {
return this.usersRepository
.createQueryBuilder('user')
.leftJoinAndSelect('user.campus', 'campus')
.leftJoinAndSelect('user.department', 'department')
.leftJoinAndSelect('department.college', 'college')
.where('user.id = :userId', { userId })
.getOne();
findOne(userId: string): Promise<User | null> {
return this.usersRepository.findOne({
where: {
id: userId,
},
relations: {
campus: true,
department: {
college: true,
},
},
});
}
}
Loading