Skip to content

Commit c70bcb9

Browse files
committed
Revalidate FE pages on job listing save
1 parent a825cd4 commit c70bcb9

File tree

5 files changed

+73
-3
lines changed

5 files changed

+73
-3
lines changed

backend/cms/components/page/tasks.py

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ def revalidate_vercel_frontend_task(page_id):
1414

1515
settings = VercelFrontendSettings.for_site(site)
1616

17-
site_name = site.site_name
1817
hostname = site.hostname
1918

2019
url = settings.revalidate_url
@@ -48,6 +47,15 @@ def revalidate_vercel_frontend_task(page_id):
4847
else:
4948
path = f"/{language_code}{page_path}"
5049

50+
execute_frontend_revalidate(
51+
url=url,
52+
path=path,
53+
secret=secret,
54+
)
55+
56+
57+
@app.task
58+
def execute_frontend_revalidate(url: str, path: str, secret: str):
5159
try:
5260
response = requests.post(
5361
url,
@@ -59,7 +67,7 @@ def revalidate_vercel_frontend_task(page_id):
5967
)
6068
response.raise_for_status()
6169
except Exception as e:
62-
logger.error(f"Error while revalidating {path} on {site_name}: {e}")
70+
logger.error(f"Error while revalidating {path}: {e}")
6371
return
6472

65-
logger.info(f"Revalidated {path} on {site_name}")
73+
logger.info(f"Revalidated {path}")

backend/conferences/admin/conference.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,15 @@ class ConferenceAdmin(
162162
)
163163
},
164164
),
165+
(
166+
"Frontend Settings",
167+
{
168+
"fields": (
169+
"frontend_revalidate_url",
170+
"frontend_revalidate_secret",
171+
)
172+
},
173+
),
165174
(
166175
"Conference",
167176
{
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
# Generated by Django 5.1.4 on 2025-04-13 18:06
2+
3+
from django.db import migrations, models
4+
5+
6+
class Migration(migrations.Migration):
7+
8+
dependencies = [
9+
('conferences', '0053_conference_slack_new_invitation_letter_request_channel_id'),
10+
]
11+
12+
operations = [
13+
migrations.AddField(
14+
model_name='conference',
15+
name='frontend_revalidate_secret',
16+
field=models.CharField(blank=True, default='', max_length=32224),
17+
),
18+
migrations.AddField(
19+
model_name='conference',
20+
name='frontend_revalidate_url',
21+
field=models.URLField(blank=True, default=''),
22+
),
23+
]

backend/conferences/models/conference.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,16 @@ class Conference(GeoLocalizedModel, TimeFramedModel, TimeStampedModel):
148148
blank=True,
149149
)
150150

151+
frontend_revalidate_url = models.URLField(
152+
default="",
153+
blank=True,
154+
)
155+
frontend_revalidate_secret = models.CharField(
156+
default="",
157+
blank=True,
158+
max_length=32224,
159+
)
160+
151161
def get_slack_oauth_token(self):
152162
return self.organizer.slack_oauth_bot_token
153163

backend/job_board/admin.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
from django.contrib import admin
2+
from cms.components.page.tasks import execute_frontend_revalidate
23
from ordered_model.admin import OrderedModelAdmin
34
from custom_admin.widgets import RichEditorWidget
45

@@ -16,3 +17,22 @@ def formfield_for_dbfield(self, db_field, **kwargs):
1617
kwargs["widget"] = RichEditorWidget()
1718

1819
return super().formfield_for_dbfield(db_field, **kwargs)
20+
21+
def save_model(self, request, obj, form, change):
22+
super().save_model(request, obj, form, change)
23+
conference = obj.conference
24+
25+
if not conference.frontend_revalidate_url:
26+
return
27+
28+
for locale in ["en", "it"]:
29+
execute_frontend_revalidate.delay(
30+
url=conference.frontend_revalidate_url,
31+
path=f"/{locale}/jobs/",
32+
secret=conference.frontend_revalidate_secret,
33+
)
34+
execute_frontend_revalidate.delay(
35+
url=conference.frontend_revalidate_url,
36+
path=f"/{locale}/jobs/{obj.id}",
37+
secret=conference.frontend_revalidate_secret,
38+
)

0 commit comments

Comments
 (0)