Added APIs for team and members
This commit is contained in:
141
rog/models.py
141
rog/models.py
@ -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時間'
|
||||
|
||||
Reference in New Issue
Block a user