diff --git a/calendar.html b/calendar.html
new file mode 100644
index 0000000..2c4186c
--- /dev/null
+++ b/calendar.html
@@ -0,0 +1,85 @@
+
+
+
+
+
+ Eversync
+ {% load static %}
+
+
+
+
+
+
+
+
+ Calendar
+
+
+
+
+
+
\ No newline at end of file
diff --git a/eversyncc/migrations/0004_event.py b/eversyncc/migrations/0004_event.py
new file mode 100644
index 0000000..746f09a
--- /dev/null
+++ b/eversyncc/migrations/0004_event.py
@@ -0,0 +1,27 @@
+# Generated by Django 5.2 on 2025-05-08 22:42
+
+import django.db.models.deletion
+from django.conf import settings
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('eversyncc', '0003_alter_document_file'),
+ migrations.swappable_dependency(settings.AUTH_USER_MODEL),
+ ]
+
+ operations = [
+ migrations.CreateModel(
+ name='Event',
+ fields=[
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+ ('title', models.CharField(max_length=200)),
+ ('description', models.TextField(blank=True)),
+ ('start_time', models.DateTimeField()),
+ ('end_time', models.DateTimeField()),
+ ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
+ ],
+ ),
+ ]
diff --git a/eversyncc/models.py b/eversyncc/models.py
index 0c4b97d..05d8bba 100644
--- a/eversyncc/models.py
+++ b/eversyncc/models.py
@@ -10,3 +10,13 @@ class Document(models.Model):
def __str__(self):
return self.title
+
+class Event(models.Model):
+ title = models.CharField(max_length=200)
+ description = models.TextField(blank=True)
+ start_time = models.DateTimeField()
+ end_time = models.DateTimeField()
+ user = models.ForeignKey(User, on_delete=models.CASCADE)
+
+ def __str__(self):
+ return self.title
diff --git a/eversyncc/urls.py b/eversyncc/urls.py
index 66b51d4..0284b85 100644
--- a/eversyncc/urls.py
+++ b/eversyncc/urls.py
@@ -1,6 +1,6 @@
from django.urls import path
from . import views
-from .views import RedirectFromLogin, upload_file, file_list, delete_file
+from .views import RedirectFromLogin, upload_file, file_list, delete_file, calendar
from django.conf import settings
from django.conf.urls.static import static
@@ -16,7 +16,8 @@ urlpatterns = [
path("accounts/login/", RedirectFromLogin.as_view(), name="login"),
path('upload/', upload_file, name='upload_file'),
path('file_list/', file_list, name='file_list'),
- path('delete_file/', delete_file, name='delete_file')
+ path('delete_file/', delete_file, name='delete_file'),
+ path('calendar/', calendar, name="calendar")
]
if settings.DEBUG:
diff --git a/eversyncc/views.py b/eversyncc/views.py
index bd08c01..96d186b 100644
--- a/eversyncc/views.py
+++ b/eversyncc/views.py
@@ -7,7 +7,7 @@ from django.contrib.auth import logout
from django.contrib.auth.models import User
from django.contrib.auth.views import PasswordChangeView
from .forms import UsernameChangeForm, DocumentForm
-from .models import Document
+from .models import Document, Event
from django.contrib import messages
from allauth.account.views import LoginView as AllauthLoginView
import os
@@ -121,4 +121,17 @@ def delete_file(request, file_id):
os.remove(file_path)
return JsonResponse({'message' : 'Success.'})
except Document.DoesNotExist:
- return JsonResponse({'error': 'Error.'}, status=404)
\ No newline at end of file
+ return JsonResponse({'error': 'Error.'}, status=404)
+
+@login_required
+def calendar(request):
+ events = Event.objects.filter(user=request.user)
+ events_data = [
+ {
+ "title": event.title,
+ "start": event.start_time.isoformat(),
+ "end": event.end_time.isoformat(),
+ }
+ for event in events
+ ]
+ return render(request, 'calendar.html', {'events_data': events_data})
\ No newline at end of file