# All files / services uploadService.js

0% Statements 0/31
0% Branches 0/9
0% Functions 0/6
0% Lines 0/29

Press n or j to go to the next uncovered block, b, p or k for the previous block.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97

     /**
     * 문서 업로드 관리 서비스
     *
     * 파일 업로드 및 문서 메타데이터 관리 관련 비즈니스 로직 처리
     *
     * @author TK-FB-Project
     * @since 2025-12-11
     */

    const uploadModel = require('../models/uploadModel');
    const { ValidationError, DatabaseError } = require('../utils/errors');
    const logger = require('../utils/logger');

    /**
     * 문서 업로드 생성
     */
    const createUploadService = async (uploadData) => {
      const {
        title,
        tags,
        description,
        original_name,
        stored_name,
        file_path,
        file_type,
        file_size,
        submitted_by
      } = uploadData;

      // 필수 필드 검증
      if (!original_name || !stored_name || !file_path) {
        throw new ValidationError('필수 필드가 누락되었습니다', {
          required: ['original_name', 'stored_name', 'file_path'],
          received: { original_name, stored_name, file_path }
        });
      }

      logger.info('문서 업로드 생성 요청', {
        title,
        original_name,
        file_type,
        file_size,
        submitted_by
      });

      try {
        const insertId = await new Promise((resolve, reject) => {
          uploadModel.create(uploadData, (err, id) => {
            if (err) reject(err);
            else resolve(id);
          });
        });

        logger.info('문서 업로드 생성 성공', {
          upload_id: insertId,
          original_name,
          file_size
        });

        return { upload_id: insertId };
      } catch (error) {
        logger.error('문서 업로드 생성 실패', {
          original_name,
          error: error.message
        });
        throw new DatabaseError('문서 업로드 생성 중 오류가 발생했습니다');
      }
    };

    /**
     * 전체 업로드 문서 조회
     */
    const getAllUploadsService = async () => {
      logger.info('업로드 문서 목록 조회 요청');

      try {
        const rows = await new Promise((resolve, reject) => {
          uploadModel.getAll((err, data) => {
            if (err) reject(err);
            else resolve(data);
          });
        });

        logger.info('업로드 문서 목록 조회 성공', { count: rows.length });

        return rows;
      } catch (error) {
        logger.error('업로드 문서 목록 조회 실패', { error: error.message });
        throw new DatabaseError('업로드 문서 목록 조회 중 오류가 발생했습니다');
      }
    };

    module.exports = {
      createUploadService,
      getAllUploadsService
    };