Select Git revision
eventController.js
-
MinJae Kwon authoredMinJae Kwon authored
eventController.js 9.02 KiB
const Event = require('../models/Event');
const EventParticipants = require('../models/EventParticipants');
const {Op} = require('sequelize');
const moment = require('moment'); // 날짜 포맷팅 라이브러리
const UserEvent = require('../models/UserEvent.js');
const {redisClient, capCheckLuaScript} = require("../datastore/redis");
const UserCrew = require("../models/UserCrew");
// 한 페이지당 기본 아이템 수
const itemsPerPage = 10;
const countKeyPattern = 'event:${eventID}:participant_count';
// 이벤트 목록 조회 (단일 엔드포인트)
exports.getEvents = async (req, res) => {
console.log('이벤트 목록 조회 컨트롤러 실행'); // 로그 확인용
try {
const {sportTypeId, regionID, eventDate, page = 1} = req.query; // 쿼리 파라미터 가져오기
const offset = (page - 1) * itemsPerPage; // 시작 지점 계산
const where = {};
// 쿼리 파라미터 조건 추가
if (sportTypeId) where.sportTypeId = sportTypeId;
if (regionID) where.regionID = regionID;
if (eventDate) where.eventDate = eventDate;
// 이벤트 데이터 가져오기
const {rows: events, count: total} = await Event.findAndCountAll({
where,
limit: itemsPerPage,
offset,
});
// 응답 데이터 반환
res.status(200).json({
events,
total, // 조건에 맞는 총 이벤트 개수
itemsPerPage, // 페이지당 이벤트 수
});
} catch (error) {
console.error('이벤트 목록 조회 중 오류:', error);
res.status(500).json({error: '이벤트 목록 조회 중 오류가 발생했습니다.'});
}
};
// 이벤트 생성 컨트롤러
exports.createEvent = async (req, res) => {
try {
const {
crewID,
regionID,
name,
sportTypeId,
eventDate,
capacity,
feeCondition,
} = req.body;
const userID = req.user.userID;
// TODO: 클라이언트에게 누락된 필드 정보를 명시적으로 전달하지 못하는 패턴입니다.
// 추후 리팩터링 시 누락된 필드를 클라이언트에 명확히 알려주는 로직으로 개선할 필요가 있습니다.
if (!regionID || !sportTypeId) {
return res.status(400).json({error: '필수 필드가 누락되었습니다.'});
}
const newEvent = await Event.create({
crewID,
regionID,