Added APIs for team and members

This commit is contained in:
2024-07-20 11:15:33 +09:00
parent f0114ef33c
commit 1c7a6a1f5c
7 changed files with 395 additions and 30 deletions

View File

@ -23,6 +23,11 @@ from django.apps import apps
from django.db import transaction
from django.contrib.auth.models import AbstractBaseUser, PermissionsMixin, BaseUserManager
from django.contrib.postgres.indexes import GistIndex
from django.db import models
from django.contrib.auth.hashers import make_password
from django.utils import timezone
from datetime import timedelta
import csv
import codecs
@ -61,35 +66,123 @@ def remove_bom_inplace(path):
fp.seek(-bom_length, os.SEEK_CUR)
fp.truncate()
#========== Akira ここから
class TempUser(models.Model):
email = models.EmailField(unique=True)
password = models.CharField(max_length=128)
is_rogaining = models.BooleanField(default=False)
zekken_number = models.CharField(max_length=255, blank=True, null=True)
event_code = models.CharField(max_length=255, blank=True, null=True)
team_name = models.CharField(max_length=255, blank=True, null=True)
group = models.CharField(max_length=255)
verification_code = models.UUIDField(default=uuid.uuid4, editable=False)
created_at = models.DateTimeField(auto_now_add=True)
expires_at = models.DateTimeField()
def __str__(self):
return self.email
def save(self, *args, **kwargs):
if not self.expires_at:
self.expires_at = timezone.now() + timedelta(hours=24) # 24時間の有効期限
super().save(*args, **kwargs)
def is_valid(self):
return timezone.now() <= self.expires_at
class Team(models.Model):
zekken_number = models.CharField(max_length=255, primary_key=True)
team_name = models.CharField(max_length=255)
password = models.CharField(max_length=128)
def __str__(self):
return f"{self.zekken_number} - {self.team_name}"
class Member(models.Model):
zekken_number = models.ForeignKey(Team, on_delete=models.CASCADE)
userid = models.ForeignKey(CustomUser, on_delete=models.CASCADE)
class Meta:
unique_together = ('zekken_number', 'userid')
def __str__(self):
return f"{self.zekken_number} - {self.userid}"
class Entry(models.Model):
zekken_number = models.ForeignKey(Team, on_delete=models.CASCADE)
event_code = models.CharField(max_length=255)
date = models.DateField()
class Meta:
unique_together = ('zekken_number', 'event_code', 'date')
def __str__(self):
return f"{self.zekken_number} - {self.event_code} - {self.date}"
#============= Akira ここまで
class CustomUserManager(BaseUserManager):
def create_user(self, email, password, group, event_code, team_name, **other_fields):
def create_user(self, email, firstname, lastname, date_of_birth, password=None):
if not email:
raise ValueError(_("You must provide an email address"))
# email = self.normalize_email(email)
user=self.model(email=email, group=group, event_code=event_code, team_name=team_name, zekken_number=email, is_rogaining=True, **other_fields)
user.set_password(password)
user.save()
# ユニークなuseridを生成
userid = str(uuid.uuid4())
user = self.model(
email=self.normalize_email(email),
firstname=firstname,
lastname=lastname,
userid=userid,
date_of_birth=date_of_birth,
)
user.set_password(password)
user.save(using=self._db)
return user
def create_superuser(self, email, password, group, **other_fields):
other_fields.setdefault('is_staff', True)
other_fields.setdefault('is_superuser', True)
other_fields.setdefault('is_active', True)
def create_superuser(self, email, firstname, lastname, date_of_birth, password):
user = self.create_user(
email,
firstname=firstname,
lastname=lastname,
date_of_birth=date_of_birth,
password=password,
)
user.is_staff = True
user.is_superuser = True
user.is_active = True
user.save(using=self._db)
return user
if other_fields.get('is_staff') is not True:
raise ValueError(_('Supperuser must assigned to staff'))
if other_fields.get('is_superuser') is not True:
raise ValueError(_('Supperuser must assigned to superuser=True'))
class CustomUser(AbstractBaseUser, PermissionsMixin):
email = models.EmailField(unique=True)
firstname = models.CharField(max_length=255)
lastname = models.CharField(max_length=255)
userid = models.CharField(max_length=255, unique=True)
date_of_birth = models.DateField()
is_active = models.BooleanField(default=True)
is_staff = models.BooleanField(default=False)
event_code = models.CharField(max_length=255, blank=True, null=True)
team_name = models.CharField(max_length=255, blank=True, null=True)
zekken_number = models.CharField(max_length=255, blank=True, null=True)
return self.create_user(email, password, group, **other_fields)
objects = CustomUserManager()
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = ['firstname', 'lastname', 'userid', 'date_of_birth']
def __str__(self):
return self.email
class JpnAdminMainPerf(models.Model):
geom = models.MultiPolygonField(blank=True, null=True)
@ -195,6 +288,26 @@ class UserUploadUser(models.Model):
class CustomUser(AbstractBaseUser, PermissionsMixin):
email = models.EmailField(unique=True)
firstname = models.CharField(max_length=255)
lastname = models.CharField(max_length=255)
userid = models.CharField(max_length=255, unique=True, editable=False)
date_of_birth = models.DateField()
is_active = models.BooleanField(default=True)
is_staff = models.BooleanField(default=False)
event_code = models.CharField(max_length=255, blank=True, null=True)
team_name = models.CharField(max_length=255, blank=True, null=True)
zekken_number = models.CharField(max_length=255, blank=True, null=True)
objects = CustomUserManager()
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = ['firstname', 'lastname', 'date_of_birth']
def __str__(self):
return self.email
class CustomUser_old(AbstractBaseUser, PermissionsMixin):
class Groups(models.TextChoices):
GB1 = '大垣-初心者', '大垣-初心者'
GB2 = '大垣-3時間', '大垣-3時間'