Skip to content

Commit

Permalink
Merge pull request #45 from PeiPeiC/DEVELOP
Browse files Browse the repository at this point in the history
Countdown and Countup modes
  • Loading branch information
PeiPeiC authored Mar 13, 2024
2 parents a22a13c + 4c60642 commit 2f156b0
Show file tree
Hide file tree
Showing 27 changed files with 447 additions and 173 deletions.
3 changes: 0 additions & 3 deletions SecondSavings/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,9 +35,6 @@
# Django-allauth routes for authentication
path('secondSavings/', include('TimeTracker.urls')),




]+static(settings.MEDIA_URL,document_root=settings.MEDIA_ROOT)
# Include your app's urls here

Expand Down
25 changes: 25 additions & 0 deletions TimeTracker/migrations/0002_usersetting.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
# Generated by Django 5.0.1 on 2024-03-06 13:10

import django.db.models.deletion
from django.conf import settings
from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
('TimeTracker', '0001_initial'),
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
]

operations = [
migrations.CreateModel(
name='UserSetting',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('alarm', models.CharField(choices=[('default', '/media/alarm/default.mp3'), ('marimba', '/media/alarm/Marimba.mp3'), ('harp', '/media/alarm/Harp.mp3')], default='default', max_length=10)),
('syncGoogleTask', models.BooleanField(default=False)),
('user', models.OneToOneField(default=None, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
],
),
]
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
# Generated by Django 5.0.1 on 2024-03-12 00:26

from django.db import migrations


class Migration(migrations.Migration):

dependencies = [
('TimeTracker', '0002_usersetting'),
('TimeTracker', '0010_group_key'),
]

operations = [
]
49 changes: 36 additions & 13 deletions TimeTracker/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,18 +4,13 @@

from django.db import models
from django.template.defaultfilters import slugify
from SecondSavings import settings

from SecondSavings import settings
from imagekit.models import ProcessedImageField
from imagekit.processors import ResizeToFill





class UserProfile(models.Model):


NICK_NAME_MAX_LENGTH = 30

user = models.OneToOneField(User, on_delete=models.CASCADE, default=None)
Expand All @@ -35,19 +30,19 @@ def save(self, *args, **kwargs):
self.nickName = self.user.username
super(UserProfile, self).save(*args, **kwargs)



def __str__(self):
return self.user.username
return 'nickname:' + self.nickName + ' avatar:' + self.avatar.url


class Group(models.Model):
name = models.CharField(max_length=100)
members = models.ManyToManyField(User, related_name='group_memberships')
creator = models.ForeignKey(User, on_delete=models.CASCADE, default=1)
key = models.CharField(max_length=64, default='00000000')

def __str__(self):
return self.name


class Task(models.Model):
TITLE_MAX_LENGTH = 120
Expand All @@ -62,10 +57,10 @@ class Task(models.Model):
badge = models.ImageField(upload_to='badge_images', blank=True)
startTime = models.DateTimeField(null=True, blank=True)
endTime = models.DateTimeField(null=True, blank=True)
isCompleted = models.BooleanField(default=False) # 新增字段标记任务是否完成
isCompleted = models.BooleanField(default=False) # 新增字段标记任务是否完成
chosenDate = models.DateField(null=True, blank=True) # 新增字段存储用户选择的日期
totalTaskTime = models.TimeField(default="00:00:00") #新增总学习时间
totalBreakTime = models.TimeField(default="00:00:00") #新增总休息时间
totalTaskTime = models.TimeField(default="00:00:00") # 新增总学习时间
totalBreakTime = models.TimeField(default="00:00:00") # 新增总休息时间

def __str__(self):
return self.title
Expand All @@ -85,3 +80,31 @@ class Record(models.Model):
task = models.ForeignKey(Task, on_delete=models.CASCADE, blank=True, null=True)
startTime = models.DateTimeField(default=timezone.now, blank=True)
endTime = models.DateTimeField(blank=True, null=True)


class UserSetting(models.Model):
ALARM_MAX_LENGTH = 10
ALARM_CHOICES = [
('default', f"{settings.MEDIA_URL}alarm/default.mp3"),
('marimba', f"{settings.MEDIA_URL}alarm/Marimba.mp3"),
('harp', f"{settings.MEDIA_URL}alarm/Harp.mp3")
]

user = models.OneToOneField(User, on_delete=models.CASCADE, default=None)
alarm = models.CharField(choices=ALARM_CHOICES, default='default', max_length=ALARM_MAX_LENGTH)
syncGoogleTask = models.BooleanField(default=False)

def __str__(self):
return 'user:' + self.user.username + ' alarm:' + self.alarm

def get_url(self):
for key, value in self.ALARM_CHOICES:
if self.alarm == key:
return value
return None # Return None if the key is not found

def get_alarm(self, url):
for key, value in self.ALARM_CHOICES:
if url == value:
return key
return None
3 changes: 2 additions & 1 deletion TimeTracker/signals.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,15 @@
from django.db.models.signals import post_save
from django.dispatch import receiver

from TimeTracker.models import UserProfile
from TimeTracker.models import UserProfile, UserSetting


# When create a new User, create a related UserProfile
@receiver(post_save, sender=User)
def create_user_profile(sender, instance, created, **kwargs):
if created:
UserProfile.objects.create(user=instance)
UserSetting.objects.create(user=instance)

@receiver(post_save, sender=User)
def save_user_profile(sender, instance, **kwargs):
Expand Down
19 changes: 0 additions & 19 deletions TimeTracker/test.py

This file was deleted.

49 changes: 48 additions & 1 deletion TimeTracker/tests.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,50 @@
from django.test import TestCase
import json

from django.contrib.auth.models import User
from django.test import TestCase, Client
from django.urls import reverse

from TimeTracker.models import UserSetting, UserProfile


# Create your tests here.

# setting test
class SettingViewTestCase(TestCase):
def setUp(self):
self.client = Client()
self.user = User.objects.create_user(username='test', password='test')

def test_setting(self):
self.client.force_login(self.user)
url = reverse('TimeTracker:setting')
response = self.client.get(url)
self.assertEqual(response.status_code, 200)

self.assertIn('user_setting', response.context)
self.assertIn('alarm_choices', response.context)
self.assertIn('user_profile', response.context)

def test_setting_sync(self):
self.client.force_login(self.user)
url = reverse('TimeTracker:setting_sync_google_task')

data = {'isSync': True}
response = self.client.post(url, json.dumps(data), content_type='application/json')

self.assertEqual(response.status_code, 302)
# Check if the user_setting is updated
updated_user_setting = UserSetting.objects.get(user=self.user)
self.assertEqual(updated_user_setting.syncGoogleTask, True)

def test_alarm_update(self):
self.client.force_login(self.user)
url = reverse('TimeTracker:setting_update_alarm')

data = {'alarmSelected': '/media/alarm/Marimba.mp3'}
response = self.client.post(url, json.dumps(data), content_type='application/json')

self.assertEqual(response.status_code, 200)
# Check if the user_setting is updated
updated_user_setting = UserSetting.objects.get(user=self.user)
self.assertEqual(updated_user_setting.alarm, 'marimba')
25 changes: 13 additions & 12 deletions TimeTracker/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,19 +6,22 @@
urlpatterns = [
path('', views.main, name='main'),
path("main/", views.main, name='main'),
# profile
path('report/', views.report, name='report'),
#path('Group/', views.table, name='table')
path("login_main/", views.login_main, name='login_main'),

path('MusicList/', views.music, name='music'),
path('Coin/', views.coin, name='coin'),
path('Settings/', views.setting, name='setting'),
path('Badges/', views.badges, name='badges'),
path('profile/',views.profile, name='profile'),
# profile
path('profile/', views.profile, name='profile'),
path('profile/update/', views.profile_update, name='profile_update'),
path('profile/avater_update/', views.avatar_update, name='avatar_update'),
path("login_main/", views.login_main, name='login_main'),


# setting
path('setting/', views.setting, name='setting'),
path('setting/sync_google_task', views.setting_sync, name='setting_sync_google_task'),
path('setting/update_alarm', views.alarm_update, name='setting_update_alarm'),

path('report/', views.report, name='report'),
path('Coin/', views.coin, name='coin'),
path('Badges/', views.badges, name='badges'),

path('Group/', views.group, name='group'),
path('get_user_groups/', views.get_user_groups, name='get_user_groups'),
path('create_group/', views.create_group, name='create_group'),
Expand All @@ -28,9 +31,7 @@
path('join_group/<int:group_id>/', views.join_group, name='join_group'),
path('groupStudy/<int:group_id>/', views.group_study, name='group_study'),
path('topStudyTimes', views.top_study_times, name='top_study_times'),



path('create_task/', views.create_task, name='create_task'),
path('update_task_date/', views.update_task_date, name='update_task_date'),
path('delete_task/', views.delete_task, name='delete_task'),
Expand Down
Loading

0 comments on commit 2f156b0

Please sign in to comment.