팀 생성 임시 완료
This commit is contained in:
@@ -2,7 +2,7 @@
|
||||
* 이벤트 컨트롤러
|
||||
* 이벤트 관련 기능을 처리하는 컨트롤러
|
||||
*/
|
||||
const { Event, EventParticipant, Member, Club, EventScore, ClubMember } = require('../models');
|
||||
const { Event, EventParticipant, Member, Club, EventScore, ClubMember, EventTeam, EventTeamMember } = require('../models');
|
||||
const { Op } = require('sequelize');
|
||||
const { sequelize } = require('../models');
|
||||
|
||||
@@ -78,7 +78,7 @@ exports.getEventById = async (req, res) => {
|
||||
},
|
||||
{
|
||||
model: EventParticipant,
|
||||
attributes: ['id', 'status', 'paymentStatus', 'teamNumber'],
|
||||
attributes: ['id', 'status', 'paymentStatus'],
|
||||
where: { status: { [Op.ne]: '취소' } },
|
||||
required: false,
|
||||
include: [
|
||||
@@ -538,7 +538,6 @@ exports.updateEventScore = async (req, res) => {
|
||||
const newScore = await EventScore.create({
|
||||
eventId,
|
||||
participantId: existingScore.participantId,
|
||||
teamNumber: existingScore.teamNumber,
|
||||
gameNumber,
|
||||
score,
|
||||
handicap,
|
||||
@@ -1004,9 +1003,8 @@ exports.addEventParticipant = async (req, res) => {
|
||||
const {
|
||||
clubId,
|
||||
memberId,
|
||||
teamNumber,
|
||||
paymentStatus,
|
||||
paymentAmount
|
||||
status,
|
||||
paymentStatus
|
||||
} = req.body;
|
||||
const eventId = req.params.id;
|
||||
if (!eventId || !clubId || !memberId) {
|
||||
@@ -1071,12 +1069,10 @@ exports.addEventParticipant = async (req, res) => {
|
||||
const participant = await EventParticipant.create({
|
||||
eventId,
|
||||
memberId,
|
||||
teamNumber: teamNumber || 1,
|
||||
status: req.body.status || '참가예정',
|
||||
attendance: false,
|
||||
paymentStatus: req.body.paymentStatus || '미납',
|
||||
paymentAmount: paymentAmount || event.entryFee || 0,
|
||||
registeredAt: new Date()
|
||||
status: status || '참가예정',
|
||||
paymentStatus: paymentStatus || '미납',
|
||||
createdAt: new Date(),
|
||||
updatedAt: new Date()
|
||||
});
|
||||
|
||||
// 참가자 정보 조회
|
||||
@@ -1166,6 +1162,96 @@ exports.updateEventParticipant = async (req, res) => {
|
||||
}
|
||||
};
|
||||
|
||||
// [팀 생성 기능] 이벤트별 팀 목록 조회
|
||||
exports.getEventTeams = async (req, res) => {
|
||||
try {
|
||||
const eventId = req.params.id;
|
||||
if (!eventId) {
|
||||
return res.status(400).json({ message: '이벤트 ID가 필요합니다.' });
|
||||
}
|
||||
const teams = await EventTeam.findAll({
|
||||
where: { eventId },
|
||||
include: [
|
||||
{
|
||||
model: EventTeamMember,
|
||||
include: [
|
||||
{
|
||||
model: EventParticipant,
|
||||
include: [{ model: Member }]
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
order: [['teamNumber', 'ASC']]
|
||||
});
|
||||
const result = teams.map(team => ({
|
||||
id: team.id,
|
||||
teamNumber: team.teamNumber,
|
||||
handicap: team.handicap,
|
||||
members: (team.EventTeamMembers || [])
|
||||
.sort((a, b) => a.order - b.order)
|
||||
.map(tm => ({
|
||||
id: tm.eventParticipantId,
|
||||
name: tm.EventParticipant?.Member?.name || `참가자 ${tm.eventParticipantId}`,
|
||||
order: tm.order
|
||||
}))
|
||||
}));
|
||||
res.json({ teams: result });
|
||||
} catch (error) {
|
||||
console.error('팀 목록 조회 오류:', error);
|
||||
res.status(500).json({ message: '팀 목록을 가져오는 중 오류가 발생했습니다.' });
|
||||
}
|
||||
};
|
||||
|
||||
// [팀 생성 기능] 이벤트별 팀 배정 저장
|
||||
exports.createOrUpdateEventTeams = async (req, res) => {
|
||||
const eventId = req.params.id;
|
||||
const { teams } = req.body; // [{teamNumber, handicap, members:[id]}]
|
||||
|
||||
if (!eventId || !Array.isArray(teams)) {
|
||||
return res.status(400).json({ message: '이벤트 ID와 팀 정보가 필요합니다.' });
|
||||
}
|
||||
|
||||
try {
|
||||
await sequelize.transaction(async (t) => {
|
||||
// 기존 팀 및 팀멤버 데이터 삭제
|
||||
await EventTeam.destroy({ where: { eventId }, transaction: t });
|
||||
await EventTeamMember.destroy({
|
||||
where: {}, // eventId로만 삭제하려면, eventTeamId로 팀 id 목록을 먼저 조회해서 삭제
|
||||
transaction: t
|
||||
});
|
||||
|
||||
// 새 팀 및 팀멤버 데이터 저장
|
||||
for (const team of teams) {
|
||||
// 팀 생성
|
||||
const createdTeam = await EventTeam.create({
|
||||
eventId,
|
||||
teamNumber: team.teamNumber,
|
||||
handicap: team.handicap || 0
|
||||
}, { transaction: t });
|
||||
|
||||
// 팀 멤버(순서 포함) 저장
|
||||
if (Array.isArray(team.members) && team.members.length > 0) {
|
||||
const teamMemberRows = team.members
|
||||
.filter(m => m.id != null)
|
||||
.map(m => ({
|
||||
eventTeamId: createdTeam.id,
|
||||
eventParticipantId: m.id,
|
||||
order: m.order ?? 1
|
||||
}));
|
||||
if (teamMemberRows.length > 0) {
|
||||
await EventTeamMember.bulkCreate(teamMemberRows, { transaction: t });
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
res.json({ message: '팀 배정이 저장되었습니다.' });
|
||||
} catch (error) {
|
||||
console.error('팀 배정 저장 오류:', error);
|
||||
res.status(500).json({ message: '팀 배정 저장 중 오류가 발생했습니다.' });
|
||||
}
|
||||
};
|
||||
|
||||
// 참가자 삭제 (소프트 삭제)
|
||||
exports.deleteEventParticipant = async (req, res) => {
|
||||
try {
|
||||
|
||||
Reference in New Issue
Block a user