[210803] 업무일지

이승연·2021년 8월 3일
0

업무일지들

목록 보기
15/49

1. 쿠폰 모델링

  • 쿠폰 모델링을 잘못해서 재적용했다.
  • CouponBatch에 원하는 쿠폰의 모델을 넣어두고 해당 쿠폰이 발급될 때마다 CouponLog에 CouponBatch의 자식격인 데이터가 생성되어야 한다(1:N). 그런데 지금까지 1:1 관계로 생성되었다.
class CouponBatch(models.Model):
    name = models.CharField(max_length=50)
    description = models.CharField(max_length=1500, null = True)
    amount = models.IntegerField(validators = [MinValueValidator(0), MaxValueValidator(100000)], null = True)
    rate = models.IntegerField(validators = [MinValueValidator(0), MaxValueValidator(1)], null = True)
    active = models.BooleanField(default=True)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(null=True)
    deleted_at = models.DateTimeField(null=True)
    code = models.CharField(max_length=50, null=True)
    use_from = models.DateTimeField(auto_now_add=True)
    use_to = models.DateTimeField(null=True)

class CouponLog(models.Model):
    user = models.ForeignKey('service.User', on_delete=models.CASCADE)
    coupon = models.ForeignKey('CouponBatch', on_delete=models.CASCADE)
    is_used = models.BooleanField(default=False)
    payment = models.ForeignKey('service.Payment', on_delete=models.CASCADE, null=True)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(null=True)
    deleted_at = models.DateTimeField(null=True)     
  • 데이터베이스에서 CouponLog의 coupon을 모두 1로 이어주고 쓸데없는 CouponBatch를 모두 삭제했다.
  • CouponBatch의 code, use_from, use_to를 CouponLog로 옮기고 migrate했다.
  • Coupon 발급 관련 코드를 수정했다.
  • CouponBatch의 use_from은 created_at을 그대로 복사해서 insert했다.
  • CouponBatch의 use_to는 select id, use_from + INTERVAL '31 days' from coupon_couponlog 쿼리결과를 그대로 복사해서 insert했다.
  • CouponBatch의 code는 미리 만들어둔 coupon_code_generator를 scratch file로 run해서 만들어 insert했다.
  • 중간에 생각한거지만 애초에 CouponBatch에서 삭제하기 전에 use_from, use_to, code를 다 복사해뒀으면 훨씬 쉬웠겠다 싶다. 그래도 새로운 쿼리랑 scratch file 활용법 알게되었으니 만-족.
  • 또 실서버 & 실디비에 배포하기 전 스테이징 환경에 미리 적용해봤다. runserver로 스테이징디비 연결해서 해보고 싶었는데 방법을 알았다. 이 링크를 많이 참고했고 secret_settings나 settings 파일에서 전역변수를 선언하는 코드를 써두면 된다. 그리고 runserver할 때마다 동적으로 바꾸기.
# setting_secrets

default_database = environ.get('DJANGO_DATABASE', 'default')
DATABASES = {
    'default' : DATABASES[default_database]
}

# 명령어
DJANGO_DATABASE='staging' ./manage.py runserver

2. 샌드버드 연동

  • 이걸 하려면 데이터베이스에 call이라는 테이블을 추가하고 기존 매칭 테이블과 1:1을 만들어주어야 하며, payment와 call의 관계를 1:1에서 1:다로 바꿔줘야한다.

0개의 댓글