from datetime import timedelta from typing import Any from django.contrib.auth.mixins import LoginRequiredMixin from django.urls import reverse_lazy from django.utils import timezone from django.views.generic import CreateView, TemplateView, UpdateView from django.views.generic.edit import FormMixin from notes.models import Note, User # Create your views here. class HomePage(LoginRequiredMixin, TemplateView): template_name = "notes/home.html" def get_context_data(self, **kwargs: Any) -> dict[str, Any]: ctx = super().get_context_data(**kwargs) ctx['notes'] = self.request.user.alive_received_notes return ctx class PostNoteView(LoginRequiredMixin, CreateView): model = Note fields = ["to_user", "note"] success_url = reverse_lazy("post-a-note") def get_form(self, form_class=None): form = super().get_form(form_class) form.fields['to_user'].queryset = self.request.user.allowed_notes_to.all() return form def form_valid(self, form): self.object = note = form.save(commit=False) note.expiry = timezone.now() + timedelta(seconds=note.to_user.expiry_seconds) note.from_user = self.request.user note.save() return FormMixin.form_valid(self, form) class ProfileView(LoginRequiredMixin, UpdateView): model = User fields = ["first_name", "last_name", "allow_notes_from", "expiry_seconds"] success_url = reverse_lazy("profile") def get_object(self): return self.request.user