Skip to content
Snippets Groups Projects
Select Git revision
  • 8747d151e1d41d488f1478ae63bdedf31b41085b
  • main default protected
  • issue-28
3 results

eventController.js

Blame
  • 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,