Skip to content

Commit 933f52c

Browse files
committed
feat: add case study and contact models and queries
1 parent 434b944 commit 933f52c

File tree

20 files changed

+307
-24
lines changed

20 files changed

+307
-24
lines changed

apps/common/management/commands/graphql_schema.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
from django.core.management.base import BaseCommand, CommandParser
55
from strawberry.printer import printer as sp
66

7-
import utils.graphql.monkey_patches_printer # noqa: F401 # type: ignore[reportUnusedImport]
87
from main.graphql.schema import schema
98

109

apps/resources/__init__.py

Whitespace-only changes.

apps/resources/admin.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
from django.contrib import admin
2+
3+
# Register your models here.

apps/resources/apps.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
from django.apps import AppConfig
2+
3+
4+
class ResourcesConfig(AppConfig):
5+
default_auto_field = 'django.db.models.BigAutoField'
6+
name = 'apps.resources'

apps/resources/graphql/__init__.py

Whitespace-only changes.

apps/resources/graphql/filters.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import strawberry
2+
import strawberry_django
3+
4+
from apps.resources.models import ContactRequest, CaseStudy
5+
6+
7+
@strawberry_django.filters.filter(ContactRequest, lookups=True)
8+
class ContactRequestFilter:
9+
id: strawberry.ID | None
10+
11+
12+
@strawberry_django.filters.filter(CaseStudy, lookups=True)
13+
class CaseStudyFilter:
14+
id: strawberry.ID | None

apps/resources/graphql/orders.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import strawberry
2+
import strawberry_django
3+
4+
from apps.resources.models import CaseStudy, ContactRequest
5+
6+
7+
@strawberry_django.ordering.order(CaseStudy)
8+
class CaseStudyOrder:
9+
id: strawberry.auto
10+
11+
12+
@strawberry_django.ordering.order(ContactRequest)
13+
class ContactRequestOrder:
14+
id: strawberry.auto

apps/resources/graphql/queries.py

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
import strawberry
2+
import strawberry_django
3+
from django.db.models import QuerySet
4+
from strawberry_django.pagination import OffsetPaginated
5+
6+
from apps.resources.models import CaseStudy, ContactRequest
7+
8+
from .filters import CaseStudyFilter, ContactRequestFilter
9+
from .orders import CaseStudyOrder, ContactRequestOrder
10+
from .types import CaseStudyType, ContactRequestType
11+
12+
13+
@strawberry.type
14+
class Query:
15+
@strawberry_django.offset_paginated(
16+
OffsetPaginated[CaseStudyType],
17+
order=CaseStudyOrder,
18+
filters=CaseStudyFilter,
19+
)
20+
def caseStudies(
21+
self,
22+
) -> QuerySet[CaseStudy]:
23+
return CaseStudy.objects.all()
24+
25+
caseStudy: CaseStudyType = strawberry_django.field()
26+
27+
@strawberry_django.offset_paginated(
28+
OffsetPaginated[ContactRequestType],
29+
order=ContactRequestOrder,
30+
filters=ContactRequestFilter,
31+
)
32+
def contactRequests(
33+
self,
34+
) -> QuerySet[ContactRequest]:
35+
return ContactRequest.objects.all()
36+
37+
contactRequest: ContactRequestType = strawberry_django.field()

apps/resources/graphql/types.py

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
import strawberry
2+
import strawberry_django
3+
4+
from apps.resources.models import (
5+
ContactRequest,
6+
CaseStudy,
7+
)
8+
from utils.graphql.types import DjangoFileType
9+
10+
11+
@strawberry_django.type(CaseStudy)
12+
class CaseStudyType:
13+
id: strawberry.ID
14+
title: strawberry.auto
15+
tool_id: strawberry.ID
16+
content: strawberry.auto
17+
cover_image: DjangoFileType | None
18+
19+
20+
@strawberry_django.type(ContactRequest)
21+
class ContactRequestType:
22+
id: strawberry.ID
23+
name: strawberry.auto
24+
email: strawberry.auto
25+
created_at: strawberry.auto
26+
content: strawberry.auto
27+
national_society: strawberry.auto
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
# Generated by Django 5.2.9 on 2026-01-07 08:49
2+
3+
import django.db.models.deletion
4+
from django.conf import settings
5+
from django.db import migrations, models
6+
7+
8+
class Migration(migrations.Migration):
9+
10+
initial = True
11+
12+
dependencies = [
13+
('tool_picker', '0005_alter_tool_logo'),
14+
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
15+
]
16+
17+
operations = [
18+
migrations.CreateModel(
19+
name='ContactRequest',
20+
fields=[
21+
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
22+
('name', models.CharField(max_length=200)),
23+
('email', models.CharField(max_length=200)),
24+
('created_at', models.DateTimeField(auto_now_add=True)),
25+
('national_society', models.CharField(max_length=200)),
26+
('content', models.TextField(blank=True, null=True)),
27+
],
28+
options={
29+
'ordering': ['name'],
30+
},
31+
),
32+
migrations.CreateModel(
33+
name='CaseStudy',
34+
fields=[
35+
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
36+
('created_at', models.DateTimeField(auto_now_add=True)),
37+
('modified_at', models.DateTimeField(auto_now=True)),
38+
('title', models.CharField(max_length=200)),
39+
('content', models.TextField()),
40+
('cover_image', models.ImageField(blank=True, null=True, upload_to='case_studies/', verbose_name='Case Study Cover Image')),
41+
('created_by', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='%(class)s_created', to=settings.AUTH_USER_MODEL)),
42+
('modified_by', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='%(class)s_modified', to=settings.AUTH_USER_MODEL)),
43+
('tool', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='case_studies', to='tool_picker.tool')),
44+
],
45+
options={
46+
'ordering': ['title'],
47+
'abstract': False,
48+
},
49+
),
50+
]

0 commit comments

Comments
 (0)