diff --git a/src/account/__init__.py b/src/account/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/src/account/admin.py b/src/account/admin.py new file mode 100644 index 0000000000000000000000000000000000000000..ced8aebf3fec2c3ed4dd60e9c4369c86d1770c59 --- /dev/null +++ b/src/account/admin.py @@ -0,0 +1,13 @@ +from django.contrib import admin +from .models import Profile + + +@admin.register(Profile) +class ProfileAdmin(admin.ModelAdmin): + list_display = ('user_username', 'join_date', 'pref_group') + + def user_username(self, obj): + return obj.user.username + + user_username.admin_order_field = 'user__username' +# Register your models here. diff --git a/src/account/apps.py b/src/account/apps.py new file mode 100644 index 0000000000000000000000000000000000000000..f7b1d19cf0169baf10b53f714ee88f35813b9ac9 --- /dev/null +++ b/src/account/apps.py @@ -0,0 +1,5 @@ +from django.apps import AppConfig + + +class AccountConfig(AppConfig): + name = 'account' diff --git a/src/account/migrations/0001_initial.py b/src/account/migrations/0001_initial.py new file mode 100644 index 0000000000000000000000000000000000000000..8c4b5267abb550ca5a08c3e50a2b3f0f72a54d57 --- /dev/null +++ b/src/account/migrations/0001_initial.py @@ -0,0 +1,28 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.5 on 2017-11-11 14:13 +from __future__ import unicode_literals + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.CreateModel( + name='Profile', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('join_date', models.DateField()), + ('pref_group', models.CharField(choices=[('DT', 'DevTeam'), ('NET', 'NeTeam'), ('ST', 'SecurITeam'), ('SYS', 'SysAdmin'), ('N', 'None')], default='None', max_length=10)), + ('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), + ], + ), + ] diff --git a/src/account/migrations/0002_auto_20171114_2144.py b/src/account/migrations/0002_auto_20171114_2144.py new file mode 100644 index 0000000000000000000000000000000000000000..fc76cef337448de84b568817d4fe13dd023c0f13 --- /dev/null +++ b/src/account/migrations/0002_auto_20171114_2144.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.5 on 2017-11-14 20:44 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('account', '0001_initial'), + ] + + operations = [ + migrations.AlterField( + model_name='profile', + name='pref_group', + field=models.CharField(choices=[('DT', 'DevTeam'), ('NET', 'NeTeam'), ('ST', 'SecurITeam'), ('SYS', 'SysAdmin'), ('HAT', 'HallgatĂłi TudĂĄsbĂĄzis'), ('N', 'None')], default='None', max_length=10), + ), + ] diff --git a/src/account/migrations/__init__.py b/src/account/migrations/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/src/account/models.py b/src/account/models.py new file mode 100644 index 0000000000000000000000000000000000000000..6b0bb79c09d62f3d045e97ef37b976931cc2cb2d --- /dev/null +++ b/src/account/models.py @@ -0,0 +1,26 @@ +from django.db import models +from django.contrib.auth.models import User +from django.core.exceptions import ValidationError +import datetime + + +class Profile(models.Model): + join_date = models.DateField() + user = models.OneToOneField(User, on_delete=models.CASCADE) + TEAMS = ( + ('DT', 'DevTeam'), + ('NET', 'NeTeam'), + ('ST', 'SecurITeam'), + ('SYS', 'SysAdmin'), + ('HAT', 'HallgatĂłi TudĂĄsbĂĄzis'), + ('N', 'None'), + ) + pref_group = models.CharField(max_length=10, choices=TEAMS, default='None') + # Homeworks=models.ForeignKey(Homework) + + def __str__(self): + return self.user.username + + def clean(self): + if self.join_date > datetime.date.today() or self.join_date < datetime.date(2015, 1, 1): + raise ValidationError('Invalid date') diff --git a/src/account/serializers.py b/src/account/serializers.py new file mode 100644 index 0000000000000000000000000000000000000000..62021e9bfca6fed293f5b93d010c95a36150ad7a --- /dev/null +++ b/src/account/serializers.py @@ -0,0 +1,8 @@ +from rest_framework import serializers +from . import models + + +class ProfileSerializer(serializers.ModelSerializer): + class Meta: + model = models.Profile + fields = '__all__' diff --git a/src/account/tests.py b/src/account/tests.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/src/account/urls.py b/src/account/urls.py new file mode 100644 index 0000000000000000000000000000000000000000..96decfda8d97835f067de97638c465ff3481d11b --- /dev/null +++ b/src/account/urls.py @@ -0,0 +1,8 @@ +from rest_framework import routers +from . import views + +router = routers.DefaultRouter(trailing_slash=False) + +router.register(r'profiles', views.ProfileViewSet) + +urlpatterns = router.urls diff --git a/src/account/views.py b/src/account/views.py new file mode 100644 index 0000000000000000000000000000000000000000..50a0c059173f7d140f2a930f979cd8f6814abbd0 --- /dev/null +++ b/src/account/views.py @@ -0,0 +1,9 @@ +from rest_framework import viewsets + +from . import models +from . import serializers + + +class ProfileViewSet(viewsets.ModelViewSet): + serializer_class = serializers.ProfileSerializer + queryset = models.Profile.objects.all() diff --git a/src/kszkepzes/settings.py b/src/kszkepzes/settings.py index 98e41eb55d708a004af6ab85ac3810c91d0f8b61..d69a2b46270187fce694e5f24afadc5d259d9f6b 100644 --- a/src/kszkepzes/settings.py +++ b/src/kszkepzes/settings.py @@ -41,6 +41,8 @@ INSTALLED_APPS = [ 'rest_framework', 'social_django', 'authsch', + 'account', + 'stats', ] MIDDLEWARE = [ @@ -121,7 +123,7 @@ LOGIN_URL = "login/authsch/" LANGUAGE_CODE = 'en-us' -TIME_ZONE = 'UTC' +TIME_ZONE = 'Europe/Budapest' USE_I18N = True diff --git a/src/kszkepzes/urls.py b/src/kszkepzes/urls.py index 5a143373854dc913626f7e7bfb539826c5cbe465..7d26d9b142492fc84a1fb37b63a8f822934854ef 100644 --- a/src/kszkepzes/urls.py +++ b/src/kszkepzes/urls.py @@ -19,4 +19,6 @@ from django.contrib import admin urlpatterns = [ url(r'^admin/', admin.site.urls), url('', include('social_django.urls', namespace='social')), + url(r'^api/v1/', include('stats.urls')), + ] diff --git a/src/stats/__init__.py b/src/stats/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/src/stats/admin.py b/src/stats/admin.py new file mode 100644 index 0000000000000000000000000000000000000000..a551546486611e9b0125f25096c0125c1c1e962f --- /dev/null +++ b/src/stats/admin.py @@ -0,0 +1,5 @@ +from django.contrib import admin +from .models import KszkEvent + + +admin.site.register(KszkEvent) diff --git a/src/stats/apps.py b/src/stats/apps.py new file mode 100644 index 0000000000000000000000000000000000000000..2d09b92ca1ba59e93693ada2c0c0dd7340a9df15 --- /dev/null +++ b/src/stats/apps.py @@ -0,0 +1,5 @@ +from django.apps import AppConfig + + +class StatsConfig(AppConfig): + name = 'stats' diff --git a/src/stats/migrations/0001_initial.py b/src/stats/migrations/0001_initial.py new file mode 100644 index 0000000000000000000000000000000000000000..91e32fff21f7f6489284d3c0ab02d8b58949f049 --- /dev/null +++ b/src/stats/migrations/0001_initial.py @@ -0,0 +1,26 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.5 on 2017-11-11 14:14 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ('account', '0001_initial'), + ] + + operations = [ + migrations.CreateModel( + name='KszkEvent', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('date', models.DateField()), + ('num_of_pers', models.IntegerField()), + ('visitors', models.ManyToManyField(related_name='visitor', to='account.Profile')), + ], + ), + ] diff --git a/src/stats/migrations/0002_auto_20171111_1646.py b/src/stats/migrations/0002_auto_20171111_1646.py new file mode 100644 index 0000000000000000000000000000000000000000..7a51b6e003a0e51bf2130254034f7a8bfda83b8b --- /dev/null +++ b/src/stats/migrations/0002_auto_20171111_1646.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.5 on 2017-11-11 15:46 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('stats', '0001_initial'), + ] + + operations = [ + migrations.AlterField( + model_name='kszkevent', + name='num_of_pers', + field=models.IntegerField(editable=False), + ), + ] diff --git a/src/stats/migrations/0003_auto_20171114_2026.py b/src/stats/migrations/0003_auto_20171114_2026.py new file mode 100644 index 0000000000000000000000000000000000000000..4f61427074f3da7f8f404795ce58528a1be00bb6 --- /dev/null +++ b/src/stats/migrations/0003_auto_20171114_2026.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.5 on 2017-11-14 19:26 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('stats', '0002_auto_20171111_1646'), + ] + + operations = [ + migrations.AlterField( + model_name='kszkevent', + name='date', + field=models.DateTimeField(), + ), + ] diff --git a/src/stats/migrations/0004_remove_kszkevent_num_of_pers.py b/src/stats/migrations/0004_remove_kszkevent_num_of_pers.py new file mode 100644 index 0000000000000000000000000000000000000000..06bf71b435fa15cddf94d3352678cba5aa44784a --- /dev/null +++ b/src/stats/migrations/0004_remove_kszkevent_num_of_pers.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.5 on 2017-11-14 19:38 +from __future__ import unicode_literals + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('stats', '0003_auto_20171114_2026'), + ] + + operations = [ + migrations.RemoveField( + model_name='kszkevent', + name='num_of_pers', + ), + ] diff --git a/src/stats/migrations/__init__.py b/src/stats/migrations/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/src/stats/models.py b/src/stats/models.py new file mode 100644 index 0000000000000000000000000000000000000000..b3cea98f8d0779a9f8b033e69beb89750e7b3d79 --- /dev/null +++ b/src/stats/models.py @@ -0,0 +1,13 @@ +from django.db import models +from account.models import Profile +from django.utils import timezone +from django.core.exceptions import ValidationError + + +class KszkEvent(models.Model): + date = models.DateTimeField(null=False) + visitors = models.ManyToManyField(Profile, related_name='visitor') + + def clean(self): + if self.date > timezone.now(): + raise ValidationError('Invalid date') diff --git a/src/stats/serializers.py b/src/stats/serializers.py new file mode 100644 index 0000000000000000000000000000000000000000..83569981c7ddc3d22fa64e94970bd98dddb71b85 --- /dev/null +++ b/src/stats/serializers.py @@ -0,0 +1,8 @@ +from rest_framework import serializers +from . import models + + +class KszkEventSerializer(serializers.ModelSerializer): + class Meta: + model = models.KszkEvent + fields = ('date', 'visitors') diff --git a/src/stats/tests.py b/src/stats/tests.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/src/stats/urls.py b/src/stats/urls.py new file mode 100644 index 0000000000000000000000000000000000000000..7c03811c1c72b2efe61eb9009f450a2047212956 --- /dev/null +++ b/src/stats/urls.py @@ -0,0 +1,9 @@ +from rest_framework import routers + +from . import views + +router = routers.DefaultRouter() +router.register(r'events', views.KszkEventViewSet) + +# app_name = 'stats' +urlpatterns = router.urls diff --git a/src/stats/views.py b/src/stats/views.py new file mode 100644 index 0000000000000000000000000000000000000000..c7ed3ecdf5621171f68cd8dcacc07621296b77c1 --- /dev/null +++ b/src/stats/views.py @@ -0,0 +1,9 @@ +from rest_framework import viewsets + +from . import models +from . import serializers + + +class KszkEventViewSet(viewsets.ModelViewSet): + serializer_class = serializers.KszkEventSerializer + queryset = models.KszkEvent.objects.all()