2026/03/31 Promise - 1

김기훈·2026년 3월 31일

TIL

목록 보기
180/191
post-thumbnail

2026/03/30 예비군 훈련 이슈로 생략


기획문서 작성

테이블 명세서

  • 1차

    • 사용자 테이블 : 아이디, 비밀번호, 알림 수신 동의 여부
    • 약속 테이블 : 약속 이름, 약속 종류(비즈니스 혹은 개인), 방장 고유번호
    • 참여자 테이블 : 약속 고유번호, 사용자 고유번호, 친구 초대 권한 보유 여부, 약속 삭제 동의 여부
    • 가능 시간 테이블 : 참여자 고유번호, 시작 시간, 종료 시간
    • 장소 후보 테이블 : 약속 고유번호, 장소 이름, 위도 및 경도(GPS 정보), 카테고리(식당, 숙박 등)

ERD

요구사항 정의서

코드 예시

DB


  • 1차 코드 예시

from django.db import models
from django.contrib.auth.models import AbstractUser

class User(AbstractUser): # 쟝고가 기본으로 제공하는 사용자 모델을 상속받아 정의합니다.
    push_enabled = models.BooleanField(default=True) # 알림 수신 여부를 불리언 값으로 저장합니다.

class Event(models.Model): # 개별 약속 정보를 담는 모델 클래스를 선언합니다.
    title = models.CharField(max_length=100) # 약속 제목을 최대 100자까지 저장하는 문자열 필드입니다.
    is_business = models.BooleanField(default=False) # 비즈니스 목적 여부를 참과 거짓으로 저장합니다.
    host = models.ForeignKey(User, on_delete=models.CASCADE) # 방장 정보를 외부키로 연결하고 계정 삭제 시 연쇄 삭제합니다.
    created_at = models.DateTimeField(auto_now_add=True) # 데이터 생성 시점의 날짜와 시간을 자동으로 기록합니다.

class EventMember(models.Model): # 특정 약속의 참여자 상태를 관리하는 연결 모델 클래스입니다.
    event = models.ForeignKey(Event, on_delete=models.CASCADE) # 소속된 약속 정보를 외부키로 연결합니다.
    user = models.ForeignKey(User, on_delete=models.CASCADE) # 참여한 사용자 정보를 외부키로 연결합니다.
    can_invite = models.BooleanField(default=False) # 초대 권한 보유 여부를 기본값 거짓으로 저장합니다.
    agree_delete = models.BooleanField(default=False) # 약속 삭제에 대한 다수결 동의 여부를 저장합니다.

    class Meta: # 모델의 추가적인 메타데이터 설정을 위한 내부 클래스를 선언합니다.
        unique_together = ('event', 'user') # 약속과 사용자 번호 조합이 중복되지 않도록 고유 인덱스를 설정합니다.

class TimeSlot(models.Model): # 참여자들의 가능 시간대 목록을 관리하는 모델 클래스입니다.
    member = models.ForeignKey(EventMember, on_delete=models.CASCADE) # 시간을 등록한 참여자 정보를 외부키로 연결합니다.
    start_time = models.DateTimeField() # 약속 가능 시작 날짜와 시간을 저장합니다.
    end_time = models.DateTimeField() # 약속 가능 종료 날짜와 시간을 저장합니다.

class PlaceCandidate(models.Model): # 약속 장소 후보와 투표 결과를 관리하는 모델 클래스입니다.
    event = models.ForeignKey(Event, on_delete=models.CASCADE) # 제안된 약속 방의 정보를 외부키로 연결합니다.
    place_name = models.CharField(max_length=255) # 장소의 이름을 최대 255자까지 저장합니다.
    category = models.CharField(max_length=50) # 식당, 숙박 등 장소의 카테고리를 저장합니다.
    latitude = models.DecimalField(max_digits=9, decimal_places=6, null=True, blank=True) # 위치 표시를 위한 위도를 소수점 6자리까지 저장합니다.
    longitude = models.DecimalField(max_digits=9, decimal_places=6, null=True, blank=True) # 위치 표시를 위한 경도를 소수점 6자리까지 저장합니다.
    vote_count = models.IntegerField(default=0) # 다수결 투표에서 획득한 표의 수를 정수로 저장합니다.

profile
안녕하세요.

0개의 댓글