💡 AI 인사이트

🤖 AI가 여기에 결과를 출력합니다...

댓글 커뮤니티

쿠팡이벤트

이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.

검색

    [코담] 웹개발·실전 프로젝트·AI까지, 파이썬·장고의 모든것을 담아낸 강의와 개발 노트

    출판사 정산용 도서 판매 분석 API | ✅저자: 이유정(박사)

    ✅ 시나리오: 출판사 정산용 도서 판매 분석 API

    • 매일 아침 book_orders.json 파일을 읽어,
    • 출판사는 아래 정보를 대시보드로 확인하고자 합니다:

    요구 API

    1. 출판사별 총 매출 합계 (GET /books/publisher/)
    2. 장르별 도서 수익 평균 (GET /books/genre-avg/)
      단, 총 판매량이 2건 이상인 장르만 포함

    ✅ 원시 데이터: book_orders.json

    [
      { "order_id": "B001", "title": "파이썬 기초", "genre": "프로그래밍", "publisher": "한빛미디어", "price": 18000, "quantity": 2, "order_date": "2025-06-18" },
      { "order_id": "B002", "title": "자바 입문",   "genre": "프로그래밍", "publisher": "이지스퍼블리싱", "price": 20000, "quantity": 1, "order_date": "2025-06-18" },
      { "order_id": "B003", "title": "데이터 분석", "genre": "데이터",     "publisher": "한빛미디어", "price": 25000, "quantity": 2, "order_date": "2025-06-19" },
      { "order_id": "B004", "title": "감정 수업",   "genre": "인문",       "publisher": "민음사",     "price": 14000, "quantity": 1, "order_date": "2025-06-19" }
    ]
    

    utils.py

    import os
    import json
    from django.conf import settings
    
    def load_book_orders():
        """book_orders.json 파일을 읽어 리스트로 반환"""
        path = os.path.join(settings.______, 'book_orders.json')
        with open(path, encoding='utf-8') as f:
            return json.____(f)
    

    views.py

    from django.http import JsonResponse
    from .utils import load_book_orders
    
    def publisher_revenue(request):
        """
        출판사별 총 매출 합계
        예시 결과: [{"publisher": "한빛미디어", "revenue": 86000}, …]
        """
        data = load_book_orders()
        result = {}
    
        for item in data:
            pub = item["publisher"]
            sales = item["____"] * item["____"]
            result[pub] = result.get(pub, 0) + sales
    
        response = [{"publisher": k, "revenue": v} for k, v in sorted(result.items())]
        return JsonResponse(response, safe=____)
    
    
    def genre_average_revenue(request):
        """
        장르별 평균 수익 (단, 총 판매량 2건 이상만 포함)
        예시 결과: [{"genre": "프로그래밍", "average_revenue": 19000.0}]
        """
        data = load_book_orders()
        total_sales = {}
        total_qty = {}
    
        for item in data:
            genre = item["____"]
            sales = item["price"] * item["quantity"]
            qty = item["quantity"]
    
            total_sales[genre] = total_sales.get(genre, 0) + sales
            total_qty[genre] = total_qty.get(genre, 0) + qty
    
        response = []
        for g in sorted(total_sales.keys()):
            if total_qty[g] >= ____:
                avg = total_sales[g] / total_qty[g]
                response.append({"genre": g, "average_revenue": round(avg, 1)})
    
        return JsonResponse(response, safe=____)
    

    정답:

    path = os.path.join(settings.BASE_DIR, 'book_orders.json')
    json.load(f)
    

    views.py

    # publisher_revenue
    sales = item["price"] * item["quantity"]
    safe=False
    
    # genre_average_revenue
    genre = item["genre"]
    if total_qty[g] >= 2
    safe=False
    

    ✅의사코드: 출판사별 총 매출 합계 API

    1. JSON 파일 읽기
    2. 빈 딕셔너리 result 생성
    3. 각 주문마다:
       - 출판사 이름 가져오기
       - 판매액 계산 (price × quantity)
       - 출판사별 매출 누적
    1. 정렬된 리스트로 변환해 JsonResponse 반환
    

    장르별 평균 단가 API

    1. JSON 파일 읽기
    2. 장르별로 total_sales, total_qty 딕셔너리 생성
    3. 각 주문마다:
       - 장르별 매출 누적, 수량 누적
    4. 각 장르마다:
       - 수량이 2 이상이면 평균 = 총매출 / 총수량
       - 결과 리스트에 추가
    1. JsonResponse 반환
    
    TOP
    preload preload