diff --git a/project/accounts/__init__.py b/project/accounts/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/project/accounts/admin.py b/project/accounts/admin.py new file mode 100644 index 0000000..ea5d68b --- /dev/null +++ b/project/accounts/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/project/accounts/apps.py b/project/accounts/apps.py new file mode 100644 index 0000000..d69d316 --- /dev/null +++ b/project/accounts/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class AccountsConfig(AppConfig): + default_auto_field = 'django.db.models.BigAutoField' + name = 'accounts' diff --git a/project/accounts/migrations/__init__.py b/project/accounts/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/project/accounts/models.py b/project/accounts/models.py new file mode 100644 index 0000000..fd18c6e --- /dev/null +++ b/project/accounts/models.py @@ -0,0 +1,3 @@ +from django.db import models + +# Create your models here. diff --git a/project/accounts/tests.py b/project/accounts/tests.py new file mode 100644 index 0000000..de8bdc0 --- /dev/null +++ b/project/accounts/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/project/accounts/urls.py b/project/accounts/urls.py new file mode 100644 index 0000000..d27d046 --- /dev/null +++ b/project/accounts/urls.py @@ -0,0 +1,6 @@ +from django.urls import path, include + +urlpatterns = [ + path('', include('djoser.urls')), + path('', include('djoser.urls.authtoken')), +] diff --git a/project/accounts/views.py b/project/accounts/views.py new file mode 100644 index 0000000..c60c790 --- /dev/null +++ b/project/accounts/views.py @@ -0,0 +1,3 @@ +from django.shortcuts import render + +# Create your views here. diff --git a/project/api/urls.py b/project/api/urls.py index d2e4445..845d143 100644 --- a/project/api/urls.py +++ b/project/api/urls.py @@ -2,5 +2,6 @@ from django.contrib import admin from django.urls import path, include urlpatterns = [ - path('api/v1/', include('notes.urls')) + path('', include('notes.urls')), + path('accounts/', include('accounts.urls')), ] diff --git a/project/config/settings.py b/project/config/settings.py index 89b8d9f..3a92483 100644 --- a/project/config/settings.py +++ b/project/config/settings.py @@ -38,8 +38,10 @@ INSTALLED_APPS = [ 'django.contrib.messages', 'django.contrib.staticfiles', 'rest_framework', + 'rest_framework.authtoken', 'notes.apps.NotesConfig', - 'corsheaders' + 'corsheaders', + 'djoser' ] MIDDLEWARE = [ @@ -130,3 +132,23 @@ CORS_ALLOWED_ORIGINS = [ "http://localhost:3000", "http://localhost:8000", ] + +REST_FRAMEWORK = { + 'DEFAULT_AUTHENTICATION_CLASSES': ( + 'rest_framework.authentication.TokenAuthentication', + ), +} + +DOMAIN = 'localhost:3000' +SITE_NAME = 'localhost:3000' + +DJOSER = { + 'SEND_ACTIVATION_EMAIL': True, + 'SEND_CONFIRMATION_EMAIL': True, + 'ACTIVATION_URL': 'activation/{uid}/{token}', +} + +EMAIL_HOST = 'sandbox.smtp.mailtrap.io' +EMAIL_HOST_USER = '54ff6949e39105' +EMAIL_HOST_PASSWORD = 'c59d3eaa05f98d' +EMAIL_PORT = '2525' diff --git a/project/config/urls.py b/project/config/urls.py index 87dbb51..e84cc21 100644 --- a/project/config/urls.py +++ b/project/config/urls.py @@ -18,5 +18,5 @@ from django.urls import path, include urlpatterns = [ path('admin/', admin.site.urls), - path('', include('api.urls')) + path('api/v1/', include('api.urls')) ] diff --git a/project/db.sqlite3 b/project/db.sqlite3 index d1819e5..4b4b685 100644 Binary files a/project/db.sqlite3 and b/project/db.sqlite3 differ diff --git a/project/notes/migrations/0004_historicalnote.py b/project/notes/migrations/0004_historicalnote.py new file mode 100644 index 0000000..a18a794 --- /dev/null +++ b/project/notes/migrations/0004_historicalnote.py @@ -0,0 +1,39 @@ +# Generated by Django 4.1.7 on 2023-02-24 08:29 + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion +import django.utils.timezone +import simple_history.models + + +class Migration(migrations.Migration): + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('notes', '0003_alter_note_content'), + ] + + operations = [ + migrations.CreateModel( + name='HistoricalNote', + fields=[ + ('id', models.BigIntegerField(auto_created=True, blank=True, db_index=True, verbose_name='ID')), + ('title', models.CharField(max_length=20)), + ('content', models.CharField(max_length=1024)), + ('date_created', models.DateTimeField(default=django.utils.timezone.now, editable=False)), + ('history_id', models.AutoField(primary_key=True, serialize=False)), + ('history_date', models.DateTimeField(db_index=True)), + ('history_change_reason', models.CharField(max_length=100, null=True)), + ('history_type', models.CharField(choices=[('+', 'Created'), ('~', 'Changed'), ('-', 'Deleted')], max_length=1)), + ('history_user', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL)), + ], + options={ + 'verbose_name': 'historical note', + 'verbose_name_plural': 'historical notes', + 'ordering': ('-history_date', '-history_id'), + 'get_latest_by': ('history_date', 'history_id'), + }, + bases=(simple_history.models.HistoricalChanges, models.Model), + ), + ] diff --git a/project/notes/migrations/0005_delete_historicalnote.py b/project/notes/migrations/0005_delete_historicalnote.py new file mode 100644 index 0000000..832316c --- /dev/null +++ b/project/notes/migrations/0005_delete_historicalnote.py @@ -0,0 +1,16 @@ +# Generated by Django 4.1.7 on 2023-02-24 08:53 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('notes', '0004_historicalnote'), + ] + + operations = [ + migrations.DeleteModel( + name='HistoricalNote', + ), + ] diff --git a/project/notes/serializers.py b/project/notes/serializers.py index f07403d..c4c74cd 100644 --- a/project/notes/serializers.py +++ b/project/notes/serializers.py @@ -5,4 +5,4 @@ from .models import Note class NoteSerializer(serializers.HyperlinkedModelSerializer): class Meta: model = Note - fields = ('id', 'title', 'content') + fields = ('id', 'title', 'content', 'date_created') diff --git a/project/requirements.txt b/project/requirements.txt new file mode 100644 index 0000000..504d991 Binary files /dev/null and b/project/requirements.txt differ