Merge branch 'develop' into 'master'

Prod deploy

* Soft deletes

* sahkoinsinoorikilta.fi domain

See merge request sahkoinsinoorikilta/vtmk/web2.0-backend!34
This commit is contained in:
Aarni Halinen
2021-01-19 15:42:22 +00:00
15 changed files with 279 additions and 272 deletions
+1 -1
View File
@@ -1,4 +1,4 @@
HOST=web.sik.party HOST=api.dev.sahkoinsinoorikilta.fi
DEBUG=True DEBUG=True
SECRET_KEY=7p$85^4ibb^p4-=vs44b7!y0e-zemugze18@a#30&71=a8)dp( SECRET_KEY=7p$85^4ibb^p4-=vs44b7!y0e-zemugze18@a#30&71=a8)dp(
TG_BOT_TOKEN= TG_BOT_TOKEN=
+2 -2
View File
@@ -78,7 +78,7 @@ deploy:dev:
- develop - develop
environment: environment:
name: dev name: dev
url: http://api.dev.sik.party url: http://api.dev.sahkoinsinoorikilta.fi
variables: variables:
DOCKER_HOST: $DEV_CI_DOCKER_HOST DOCKER_HOST: $DEV_CI_DOCKER_HOST
DOCKER_TLS_VERIFY: 1 DOCKER_TLS_VERIFY: 1
@@ -100,7 +100,7 @@ deploy:production:
- master - master
environment: environment:
name: production name: production
url: api.sika.sik.party url: api.sahkoinsinoorikilta.fi
when: manual when: manual
variables: variables:
DOCKER_HOST: $CI_DOCKER_HOST DOCKER_HOST: $CI_DOCKER_HOST
+1 -1
View File
@@ -16,7 +16,7 @@
{% blocktrans %}Kaehmykoneella voit ilmaista kiinnostuksesi toimia killassa ensi vuonna. {% blocktrans %}Kaehmykoneella voit ilmaista kiinnostuksesi toimia killassa ensi vuonna.
Listassa on vastuualueittain sekä hallitus- että toimihenkilövirkoja. Listassa on vastuualueittain sekä hallitus- että toimihenkilövirkoja.
Koska lista ei ole koskaan täydellinen, voit myös ehdottaa ihan uutta toimenkuvaa. Koska lista ei ole koskaan täydellinen, voit myös ehdottaa ihan uutta toimenkuvaa.
Jos sinulla on kysyttävää mistä tahansa virasta, kannattaa konsultoida <a href="https://static.sika.sik.party/uus_webi/kahmyopas.pdf">kaehmyopasta</a> Jos sinulla on kysyttävää mistä tahansa virasta, kannattaa konsultoida <a href="https://static.sahkoinsinoorikilta.fi/uus_webi/kahmyopas.pdf">kaehmyopasta</a>
tai olla yhteydessä kyseistä virkaa tänä vuonna toimittavaan henkilöön.{% endblocktrans %} tai olla yhteydessä kyseistä virkaa tänä vuonna toimittavaan henkilöön.{% endblocktrans %}
</p> </p>
<p> <p>
Binary file not shown.
+72 -118
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: \n" "Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-11-07 17:05+0200\n" "POT-Creation-Date: 2021-01-18 21:36+0200\n"
"PO-Revision-Date: 2017-11-02 23:09+0200\n" "PO-Revision-Date: 2017-11-02 23:09+0200\n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: \n" "Language-Team: \n"
@@ -37,7 +37,7 @@ msgstr "Sössö articles"
msgid "Today's lunch" msgid "Today's lunch"
msgstr "" msgstr ""
#: infoscreen/models.py:212 webapp/models.py:68 #: infoscreen/models.py:212 webapp/models.py:70
msgid "Events" msgid "Events"
msgstr "Events" msgstr "Events"
@@ -112,9 +112,8 @@ msgstr "Preview"
msgid "Delete" msgid "Delete"
msgstr "Delete" msgstr "Delete"
#: infoscreen/templates/tabs/add_remove.html:23 kaehmy/models.py:56 #: infoscreen/templates/tabs/add_remove.html:23 kaehmy/models.py:62
#: kaehmy/templates/list.html:36 webapp/models.py:138 webapp/models.py:166 #: kaehmy/templates/list.html:36 webapp/models.py:144 webapp/models.py:173
#: webapp/models.py:192
msgid "Name" msgid "Name"
msgstr "Name" msgstr "Name"
@@ -202,157 +201,157 @@ msgstr "Invalid phone number"
msgid "Custom role with the same name already exists." msgid "Custom role with the same name already exists."
msgstr "Custom role with the same name already exists." msgstr "Custom role with the same name already exists."
#: kaehmy/models.py:13 #: kaehmy/models.py:18
msgid "Kaehmy" msgid "Kaehmy"
msgstr "Kaehmy" msgstr "Kaehmy"
#: kaehmy/models.py:19 #: kaehmy/models.py:25
msgid "Corporate affairs" msgid "Corporate affairs"
msgstr "Corporate affairs" msgstr "Corporate affairs"
#: kaehmy/models.py:20 webapp/templates/freshmen.html:10 #: kaehmy/models.py:26 webapp/templates/freshmen.html:10
#: webapp/templates/navigation.html:8 #: webapp/templates/navigation.html:8
msgid "Freshmen" msgid "Freshmen"
msgstr "Freshmen" msgstr "Freshmen"
#: kaehmy/models.py:21 webapp/templates/international.html:10 #: kaehmy/models.py:27 webapp/templates/international.html:10
#: webapp/templates/navigation.html:14 #: webapp/templates/navigation.html:14
msgid "International" msgid "International"
msgstr "International" msgstr "International"
#: kaehmy/models.py:22 #: kaehmy/models.py:28
msgid "External affairs" msgid "External affairs"
msgstr "External affairs" msgstr "External affairs"
#: kaehmy/models.py:23 #: kaehmy/models.py:29
msgid "Media" msgid "Media"
msgstr "" msgstr ""
#: kaehmy/models.py:24 #: kaehmy/models.py:30
msgid "Technology" msgid "Technology"
msgstr "" msgstr ""
#: kaehmy/models.py:25 #: kaehmy/models.py:31
msgid "Wellbeing" msgid "Wellbeing"
msgstr "" msgstr ""
#: kaehmy/models.py:26 #: kaehmy/models.py:32
msgid "Elepaja" msgid "Elepaja"
msgstr "" msgstr ""
#: kaehmy/models.py:27 #: kaehmy/models.py:33
msgid "Ceremonies" msgid "Ceremonies"
msgstr "" msgstr ""
#: kaehmy/models.py:28 #: kaehmy/models.py:34
msgid "Studies" msgid "Studies"
msgstr "" msgstr ""
#: kaehmy/models.py:29 #: kaehmy/models.py:35
msgid "Sössö magazine" msgid "Sössö magazine"
msgstr "Sössö magazine" msgstr "Sössö magazine"
#: kaehmy/models.py:30 #: kaehmy/models.py:36
msgid "Alumni relations" msgid "Alumni relations"
msgstr "Alumni relations" msgstr "Alumni relations"
#: kaehmy/models.py:31 #: kaehmy/models.py:37
msgid "Others" msgid "Others"
msgstr "" msgstr ""
#: kaehmy/models.py:33 #: kaehmy/models.py:39
msgid "Category" msgid "Category"
msgstr "" msgstr ""
#: kaehmy/models.py:39 webapp/models.py:176 #: kaehmy/models.py:45
msgid "Description" msgid "Description"
msgstr "Description" msgstr "Description"
#: kaehmy/models.py:42 #: kaehmy/models.py:48
msgid "Preset kaehmy role" msgid "Preset kaehmy role"
msgstr "Preset kaehmy role" msgstr "Preset kaehmy role"
#: kaehmy/models.py:43 #: kaehmy/models.py:49
msgid "Preset kaehmy roles" msgid "Preset kaehmy roles"
msgstr "Preset kaehmy roles" msgstr "Preset kaehmy roles"
#: kaehmy/models.py:50 #: kaehmy/models.py:56
msgid "Custom kaehmy role" msgid "Custom kaehmy role"
msgstr "Custom kaehmy role" msgstr "Custom kaehmy role"
#: kaehmy/models.py:51 #: kaehmy/models.py:57
msgid "Custom kaehmy roles" msgid "Custom kaehmy roles"
msgstr "Custom kaehmy roles" msgstr "Custom kaehmy roles"
#: kaehmy/models.py:57 kaehmy/templates/list.html:40 members/models.py:14 #: kaehmy/models.py:63 kaehmy/templates/list.html:40 members/models.py:14
msgid "Email" msgid "Email"
msgstr "Email" msgstr "Email"
#: kaehmy/models.py:58 #: kaehmy/models.py:64
msgid "Timestamp" msgid "Timestamp"
msgstr "" msgstr ""
#: kaehmy/models.py:72 #: kaehmy/models.py:78
msgid "Kaehmykommentti" msgid "Kaehmykommentti"
msgstr "Kaehmy comment" msgstr "Kaehmy comment"
#: kaehmy/models.py:73 #: kaehmy/models.py:79
msgid "Kaehmykommentit" msgid "Kaehmykommentit"
msgstr "Kaehmy comments" msgstr "Kaehmy comments"
#: kaehmy/models.py:75 ohlhafv/models.py:36 #: kaehmy/models.py:81 ohlhafv/models.py:36
msgid "Message" msgid "Message"
msgstr "" msgstr ""
#: kaehmy/models.py:94 kaehmy/templates/kaehmy.html:12 #: kaehmy/models.py:100 kaehmy/templates/kaehmy.html:12
msgid "Kaehmylomake" msgid "Kaehmylomake"
msgstr "Kaehmy application" msgstr "Kaehmy application"
#: kaehmy/models.py:95 #: kaehmy/models.py:101
msgid "Kaehmylomakkeet" msgid "Kaehmylomakkeet"
msgstr "Kaehmy applications" msgstr "Kaehmy applications"
#: kaehmy/models.py:98 webapp/models.py:252 #: kaehmy/models.py:104
msgid "Phone number" msgid "Phone number"
msgstr "" msgstr ""
#: kaehmy/models.py:99 #: kaehmy/models.py:105
msgid "Year" msgid "Year"
msgstr "" msgstr ""
#: kaehmy/models.py:100 #: kaehmy/models.py:106
msgid "Text" msgid "Text"
msgstr "" msgstr ""
#: kaehmy/models.py:102 #: kaehmy/models.py:108
msgid "Custom role name" msgid "Custom role name"
msgstr "" msgstr ""
#: kaehmy/models.py:104 webapp/models.py:167 #: kaehmy/models.py:110 webapp/models.py:174
msgid "Board member" msgid "Board member"
msgstr "Board member" msgstr "Board member"
#: kaehmy/models.py:112 #: kaehmy/models.py:118
msgid "Kaehmy application: {}" msgid "Kaehmy application: {}"
msgstr "Kaehmy application: {}" msgstr "Kaehmy application: {}"
#: kaehmy/models.py:134 #: kaehmy/models.py:140
msgid "Board: {}" msgid "Board: {}"
msgstr "" msgstr ""
#: kaehmy/models.py:140 #: kaehmy/models.py:146
msgid "Official: {}" msgid "Official: {}"
msgstr "" msgstr ""
#: kaehmy/models.py:157 #: kaehmy/models.py:163
msgid "Telegram channel" msgid "Telegram channel"
msgstr "" msgstr ""
#: kaehmy/models.py:158 #: kaehmy/models.py:164
msgid "Telegram channels" msgid "Telegram channels"
msgstr "" msgstr ""
#: kaehmy/tables.py:13 webapp/models.py:207 #: kaehmy/tables.py:13
msgid "Roles" msgid "Roles"
msgstr "" msgstr ""
@@ -393,8 +392,8 @@ msgid ""
" Koska lista ei ole koskaan täydellinen, voit myös ehdottaa ihan " " Koska lista ei ole koskaan täydellinen, voit myös ehdottaa ihan "
"uutta toimenkuvaa.\n" "uutta toimenkuvaa.\n"
" Jos sinulla on kysyttävää mistä tahansa virasta, kannattaa " " Jos sinulla on kysyttävää mistä tahansa virasta, kannattaa "
"konsultoida <a href=\"https://static.sika.sik.party/uus_webi/kahmyopas.pdf" "konsultoida <a href=\"https://static.sahkoinsinoorikilta.fi/uus_webi/"
"\">kaehmyopasta</a>\n" "kahmyopas.pdf\">kaehmyopasta</a>\n"
" tai olla yhteydessä kyseistä virkaa tänä vuonna toimittavaan " " tai olla yhteydessä kyseistä virkaa tänä vuonna toimittavaan "
"henkilöön." "henkilöön."
msgstr "" msgstr ""
@@ -410,7 +409,9 @@ msgstr ""
msgid "" msgid ""
"(HUOM! Kaehmytekstin maksimipituus on 300 merkkiä. Tarvittaessa voit " "(HUOM! Kaehmytekstin maksimipituus on 300 merkkiä. Tarvittaessa voit "
"kirjoittaa lisätietoja kommenteihin.)" "kirjoittaa lisätietoja kommenteihin.)"
msgstr "(NOTE! The application text is limited to 300 characters. You can use the comment section for additional info.)" msgstr ""
"(NOTE! The application text is limited to 300 characters. You can use the "
"comment section for additional info.)"
#: kaehmy/templates/kaehmy.html:26 #: kaehmy/templates/kaehmy.html:26
msgid "" msgid ""
@@ -528,11 +529,11 @@ msgstr "I'm a member of AYY"
msgid "I want to receive a weekly newsletter" msgid "I want to receive a weekly newsletter"
msgstr "I want to receive a weekly newsletter" msgstr "I want to receive a weekly newsletter"
#: members/models.py:12 webapp/models.py:249 #: members/models.py:12
msgid "First name" msgid "First name"
msgstr "First name" msgstr "First name"
#: members/models.py:13 webapp/models.py:250 #: members/models.py:13
msgid "Last name" msgid "Last name"
msgstr "Last name" msgstr "Last name"
@@ -1135,111 +1136,64 @@ msgstr ""
msgid "Feeds" msgid "Feeds"
msgstr "" msgstr ""
#: webapp/models.py:60 #: webapp/models.py:61 webapp/models.py:80 webapp/models.py:119
msgid "Feed: {}" #: webapp/models.py:152 webapp/models.py:198
msgstr "Feed: {}" msgid "Deleted: "
msgstr "Deleted: "
#: webapp/models.py:67 #: webapp/models.py:62
msgid "{}Feed: {}"
msgstr ""
#: webapp/models.py:69
msgid "Event" msgid "Event"
msgstr "" msgstr ""
#: webapp/models.py:77 #: webapp/models.py:81
msgid "Event: {}" msgid "{}Event: {}"
msgstr "" msgstr ""
#: webapp/models.py:87 #: webapp/models.py:91
msgid "Template question" msgid "Template question"
msgstr "" msgstr ""
#: webapp/models.py:88 #: webapp/models.py:92
msgid "Template questions" msgid "Template questions"
msgstr "" msgstr ""
#: webapp/models.py:94 #: webapp/models.py:98
msgid "Template questions: {}" msgid "Template questions: {}"
msgstr "" msgstr ""
#: webapp/models.py:101 #: webapp/models.py:105
msgid "Signup form" msgid "Signup form"
msgstr "" msgstr ""
#: webapp/models.py:102 #: webapp/models.py:106
msgid "Signup forms" msgid "Signup forms"
msgstr "" msgstr ""
#: webapp/models.py:114 #: webapp/models.py:120
msgid "#{} {}" msgid "#{} {}{}"
msgstr "" msgstr ""
#: webapp/models.py:132 #: webapp/models.py:138
msgid "Sign-up" msgid "Sign-up"
msgstr "" msgstr ""
#: webapp/models.py:133 #: webapp/models.py:139
msgid "Sign-ups" msgid "Sign-ups"
msgstr "" msgstr ""
#: webapp/models.py:171 #: webapp/models.py:178
msgid "board member" msgid "board member"
msgstr "board member" msgstr "board member"
#: webapp/models.py:186 #: webapp/models.py:185
msgid "Committee"
msgstr ""
#: webapp/models.py:187
msgid "Committees"
msgstr ""
#: webapp/models.py:190
msgid "Committee: {}"
msgstr ""
#: webapp/models.py:206
msgid "Role"
msgstr ""
#: webapp/models.py:212
msgid "Yes"
msgstr ""
#: webapp/models.py:212
msgid "No"
msgstr ""
#: webapp/models.py:223
msgid "Occupation"
msgstr "Occupation"
#: webapp/models.py:224
msgid "Occupations"
msgstr "Occupations"
#: webapp/models.py:226
msgid "Start date"
msgstr ""
#: webapp/models.py:227
msgid "End date"
msgstr ""
#: webapp/models.py:244
msgid "Official"
msgstr ""
#: webapp/models.py:245
msgid "Officials"
msgstr ""
#: webapp/models.py:251
msgid "Email address"
msgstr ""
#: webapp/models.py:277
msgid "JobAd" msgid "JobAd"
msgstr "" msgstr ""
#: webapp/models.py:278 #: webapp/models.py:186
msgid "JobAds" msgid "JobAds"
msgstr "" msgstr ""
Binary file not shown.
+71 -119
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: \n" "Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-11-07 17:05+0200\n" "POT-Creation-Date: 2021-01-18 21:36+0200\n"
"PO-Revision-Date: 2017-11-02 23:04+0200\n" "PO-Revision-Date: 2017-11-02 23:04+0200\n"
"Last-Translator: \n" "Last-Translator: \n"
"Language-Team: \n" "Language-Team: \n"
@@ -38,7 +38,7 @@ msgstr "Sössön artikkelit"
msgid "Today's lunch" msgid "Today's lunch"
msgstr "Päivän lounas" msgstr "Päivän lounas"
#: infoscreen/models.py:212 webapp/models.py:68 #: infoscreen/models.py:212 webapp/models.py:70
msgid "Events" msgid "Events"
msgstr "Tapahtumat" msgstr "Tapahtumat"
@@ -113,9 +113,8 @@ msgstr "Esikatsele"
msgid "Delete" msgid "Delete"
msgstr "Poista" msgstr "Poista"
#: infoscreen/templates/tabs/add_remove.html:23 kaehmy/models.py:56 #: infoscreen/templates/tabs/add_remove.html:23 kaehmy/models.py:62
#: kaehmy/templates/list.html:36 webapp/models.py:138 webapp/models.py:166 #: kaehmy/templates/list.html:36 webapp/models.py:144 webapp/models.py:173
#: webapp/models.py:192
msgid "Name" msgid "Name"
msgstr "Nimi" msgstr "Nimi"
@@ -203,157 +202,157 @@ msgstr "Virheellinen puhelinnumero"
msgid "Custom role with the same name already exists." msgid "Custom role with the same name already exists."
msgstr "Samanniminen virka on jo olemassa." msgstr "Samanniminen virka on jo olemassa."
#: kaehmy/models.py:13 #: kaehmy/models.py:18
msgid "Kaehmy" msgid "Kaehmy"
msgstr "Kaehmy" msgstr "Kaehmy"
#: kaehmy/models.py:19 #: kaehmy/models.py:25
msgid "Corporate affairs" msgid "Corporate affairs"
msgstr "Yrityssuhteet" msgstr "Yrityssuhteet"
#: kaehmy/models.py:20 webapp/templates/freshmen.html:10 #: kaehmy/models.py:26 webapp/templates/freshmen.html:10
#: webapp/templates/navigation.html:8 #: webapp/templates/navigation.html:8
msgid "Freshmen" msgid "Freshmen"
msgstr "Fuksit" msgstr "Fuksit"
#: kaehmy/models.py:21 webapp/templates/international.html:10 #: kaehmy/models.py:27 webapp/templates/international.html:10
#: webapp/templates/navigation.html:14 #: webapp/templates/navigation.html:14
msgid "International" msgid "International"
msgstr "International" msgstr "International"
#: kaehmy/models.py:22 #: kaehmy/models.py:28
msgid "External affairs" msgid "External affairs"
msgstr "Ulkosuhteet" msgstr "Ulkosuhteet"
#: kaehmy/models.py:23 #: kaehmy/models.py:29
msgid "Media" msgid "Media"
msgstr "Media" msgstr "Media"
#: kaehmy/models.py:24 #: kaehmy/models.py:30
msgid "Technology" msgid "Technology"
msgstr "Teknologia" msgstr "Teknologia"
#: kaehmy/models.py:25 #: kaehmy/models.py:31
msgid "Wellbeing" msgid "Wellbeing"
msgstr "Hyvinvointi" msgstr "Hyvinvointi"
#: kaehmy/models.py:26 #: kaehmy/models.py:32
msgid "Elepaja" msgid "Elepaja"
msgstr "Elepaja" msgstr "Elepaja"
#: kaehmy/models.py:27 #: kaehmy/models.py:33
msgid "Ceremonies" msgid "Ceremonies"
msgstr "Hupitapahtumat" msgstr "Hupitapahtumat"
#: kaehmy/models.py:28 #: kaehmy/models.py:34
msgid "Studies" msgid "Studies"
msgstr "Opinnot" msgstr "Opinnot"
#: kaehmy/models.py:29 #: kaehmy/models.py:35
msgid "Sössö magazine" msgid "Sössö magazine"
msgstr "Kiltalehti Sössö" msgstr "Kiltalehti Sössö"
#: kaehmy/models.py:30 #: kaehmy/models.py:36
msgid "Alumni relations" msgid "Alumni relations"
msgstr "Alumnisuhteet" msgstr "Alumnisuhteet"
#: kaehmy/models.py:31 #: kaehmy/models.py:37
msgid "Others" msgid "Others"
msgstr "Muut" msgstr "Muut"
#: kaehmy/models.py:33 #: kaehmy/models.py:39
msgid "Category" msgid "Category"
msgstr "Kategoria" msgstr "Kategoria"
#: kaehmy/models.py:39 webapp/models.py:176 #: kaehmy/models.py:45
msgid "Description" msgid "Description"
msgstr "Kuvaus" msgstr "Kuvaus"
#: kaehmy/models.py:42 #: kaehmy/models.py:48
msgid "Preset kaehmy role" msgid "Preset kaehmy role"
msgstr "Kaehmyvirka" msgstr "Kaehmyvirka"
#: kaehmy/models.py:43 #: kaehmy/models.py:49
msgid "Preset kaehmy roles" msgid "Preset kaehmy roles"
msgstr "Kaehmyvirat" msgstr "Kaehmyvirat"
#: kaehmy/models.py:50 #: kaehmy/models.py:56
msgid "Custom kaehmy role" msgid "Custom kaehmy role"
msgstr "Uusi virka" msgstr "Uusi virka"
#: kaehmy/models.py:51 #: kaehmy/models.py:57
msgid "Custom kaehmy roles" msgid "Custom kaehmy roles"
msgstr "Uudet kaehmyvirat" msgstr "Uudet kaehmyvirat"
#: kaehmy/models.py:57 kaehmy/templates/list.html:40 members/models.py:14 #: kaehmy/models.py:63 kaehmy/templates/list.html:40 members/models.py:14
msgid "Email" msgid "Email"
msgstr "Sähköposti" msgstr "Sähköposti"
#: kaehmy/models.py:58 #: kaehmy/models.py:64
msgid "Timestamp" msgid "Timestamp"
msgstr "Aikaleima" msgstr "Aikaleima"
#: kaehmy/models.py:72 #: kaehmy/models.py:78
msgid "Kaehmykommentti" msgid "Kaehmykommentti"
msgstr "Kaehmykommentti" msgstr "Kaehmykommentti"
#: kaehmy/models.py:73 #: kaehmy/models.py:79
msgid "Kaehmykommentit" msgid "Kaehmykommentit"
msgstr "Kaehmykommentit" msgstr "Kaehmykommentit"
#: kaehmy/models.py:75 ohlhafv/models.py:36 #: kaehmy/models.py:81 ohlhafv/models.py:36
msgid "Message" msgid "Message"
msgstr "Viesti" msgstr "Viesti"
#: kaehmy/models.py:94 kaehmy/templates/kaehmy.html:12 #: kaehmy/models.py:100 kaehmy/templates/kaehmy.html:12
msgid "Kaehmylomake" msgid "Kaehmylomake"
msgstr "Kaehmylomake" msgstr "Kaehmylomake"
#: kaehmy/models.py:95 #: kaehmy/models.py:101
msgid "Kaehmylomakkeet" msgid "Kaehmylomakkeet"
msgstr "Kaehmylomakkeet" msgstr "Kaehmylomakkeet"
#: kaehmy/models.py:98 webapp/models.py:252 #: kaehmy/models.py:104
msgid "Phone number" msgid "Phone number"
msgstr "Puhelinnumero" msgstr "Puhelinnumero"
#: kaehmy/models.py:99 #: kaehmy/models.py:105
msgid "Year" msgid "Year"
msgstr "Vuosi" msgstr "Vuosi"
#: kaehmy/models.py:100 #: kaehmy/models.py:106
msgid "Text" msgid "Text"
msgstr "Teksti" msgstr "Teksti"
#: kaehmy/models.py:102 #: kaehmy/models.py:108
msgid "Custom role name" msgid "Custom role name"
msgstr "Uusi virka" msgstr "Uusi virka"
#: kaehmy/models.py:104 webapp/models.py:167 #: kaehmy/models.py:110 webapp/models.py:174
msgid "Board member" msgid "Board member"
msgstr "Hallituksen jäsen" msgstr "Hallituksen jäsen"
#: kaehmy/models.py:112 #: kaehmy/models.py:118
msgid "Kaehmy application: {}" msgid "Kaehmy application: {}"
msgstr "Kaehmy: {}" msgstr "Kaehmy: {}"
#: kaehmy/models.py:134 #: kaehmy/models.py:140
msgid "Board: {}" msgid "Board: {}"
msgstr "Hallitus: {}" msgstr "Hallitus: {}"
#: kaehmy/models.py:140 #: kaehmy/models.py:146
msgid "Official: {}" msgid "Official: {}"
msgstr "Toimari: {}" msgstr "Toimari: {}"
#: kaehmy/models.py:157 #: kaehmy/models.py:163
msgid "Telegram channel" msgid "Telegram channel"
msgstr "Telegram-kanava" msgstr "Telegram-kanava"
#: kaehmy/models.py:158 #: kaehmy/models.py:164
msgid "Telegram channels" msgid "Telegram channels"
msgstr "Telegram-kanavat" msgstr "Telegram-kanavat"
#: kaehmy/tables.py:13 webapp/models.py:207 #: kaehmy/tables.py:13
msgid "Roles" msgid "Roles"
msgstr "Roolit" msgstr "Roolit"
@@ -394,8 +393,8 @@ msgid ""
" Koska lista ei ole koskaan täydellinen, voit myös ehdottaa ihan " " Koska lista ei ole koskaan täydellinen, voit myös ehdottaa ihan "
"uutta toimenkuvaa.\n" "uutta toimenkuvaa.\n"
" Jos sinulla on kysyttävää mistä tahansa virasta, kannattaa " " Jos sinulla on kysyttävää mistä tahansa virasta, kannattaa "
"konsultoida <a href=\"https://static.sika.sik.party/uus_webi/kahmyopas.pdf" "konsultoida <a href=\"https://static.sahkoinsinoorikilta.fi/uus_webi/"
"\">kaehmyopasta</a>\n" "kahmyopas.pdf\">kaehmyopasta</a>\n"
" tai olla yhteydessä kyseistä virkaa tänä vuonna toimittavaan " " tai olla yhteydessä kyseistä virkaa tänä vuonna toimittavaan "
"henkilöön." "henkilöön."
msgstr "" msgstr ""
@@ -405,7 +404,7 @@ msgstr ""
" Koska lista ei ole koskaan täydellinen, voit myös ehdottaa ihan " " Koska lista ei ole koskaan täydellinen, voit myös ehdottaa ihan "
"uutta toimenkuvaa.\n" "uutta toimenkuvaa.\n"
" Jos sinulla on kysyttävää mistä tahansa virasta, kannattaa " " Jos sinulla on kysyttävää mistä tahansa virasta, kannattaa "
"konsultoida <a href=\"https://static.sika.sik.party/uus_webi/kahmyopas.pdf" "konsultoida <a href=\"https://static.sahkoinsinoorikilta.fi/uus_webi/kahmyopas.pdf"
"\">kaehmyopasta</a> \n" "\">kaehmyopasta</a> \n"
" tai olla yhteydessä kyseistä virkaa tänä vuonna toimittavaan " " tai olla yhteydessä kyseistä virkaa tänä vuonna toimittavaan "
"henkilöön." "henkilöön."
@@ -527,11 +526,11 @@ msgstr "Olen AYY:n jäsen"
msgid "I want to receive a weekly newsletter" msgid "I want to receive a weekly newsletter"
msgstr "Haluan saada viikottaisen jäsentiedotteen" msgstr "Haluan saada viikottaisen jäsentiedotteen"
#: members/models.py:12 webapp/models.py:249 #: members/models.py:12
msgid "First name" msgid "First name"
msgstr "Etunimi" msgstr "Etunimi"
#: members/models.py:13 webapp/models.py:250 #: members/models.py:13
msgid "Last name" msgid "Last name"
msgstr "Sukunimi" msgstr "Sukunimi"
@@ -1126,111 +1125,64 @@ msgstr "Uutinen"
msgid "Feeds" msgid "Feeds"
msgstr "Uutiset" msgstr "Uutiset"
#: webapp/models.py:60 #: webapp/models.py:61 webapp/models.py:80 webapp/models.py:119
msgid "Feed: {}" #: webapp/models.py:152 webapp/models.py:198
msgstr "Uutinen: {}" msgid "Deleted: "
msgstr "Poistettu: "
#: webapp/models.py:67 #: webapp/models.py:62
msgid "{}Feed: {}"
msgstr "{}Uutinen: {}"
#: webapp/models.py:69
msgid "Event" msgid "Event"
msgstr "Tapahtuma" msgstr "Tapahtuma"
#: webapp/models.py:77 #: webapp/models.py:81
msgid "Event: {}" msgid "{}Event: {}"
msgstr "Tapahtuma: {}" msgstr "{}Tapahtuma: {}"
#: webapp/models.py:87 #: webapp/models.py:91
msgid "Template question" msgid "Template question"
msgstr "Vakiokysymys" msgstr "Vakiokysymys"
#: webapp/models.py:88 #: webapp/models.py:92
msgid "Template questions" msgid "Template questions"
msgstr "Vakiokysymykset" msgstr "Vakiokysymykset"
#: webapp/models.py:94 #: webapp/models.py:98
msgid "Template questions: {}" msgid "Template questions: {}"
msgstr "Vakiokysymykset: {}" msgstr "Vakiokysymykset: {}"
#: webapp/models.py:101 #: webapp/models.py:105
msgid "Signup form" msgid "Signup form"
msgstr "Ilmoittautumislomake" msgstr "Ilmoittautumislomake"
#: webapp/models.py:102 #: webapp/models.py:106
msgid "Signup forms" msgid "Signup forms"
msgstr "Ilmoittautumislomakkeet" msgstr "Ilmoittautumislomakkeet"
#: webapp/models.py:114 #: webapp/models.py:120
msgid "#{} {}" msgid "#{} {}{}"
msgstr "" msgstr ""
#: webapp/models.py:132 #: webapp/models.py:138
msgid "Sign-up" msgid "Sign-up"
msgstr "Ilmoittautuminen" msgstr "Ilmoittautuminen"
#: webapp/models.py:133 #: webapp/models.py:139
msgid "Sign-ups" msgid "Sign-ups"
msgstr "Ilmoittautumiset" msgstr "Ilmoittautumiset"
#: webapp/models.py:171 #: webapp/models.py:178
msgid "board member" msgid "board member"
msgstr "hallituksen jäsen" msgstr "hallituksen jäsen"
#: webapp/models.py:186 #: webapp/models.py:185
msgid "Committee"
msgstr "Toimikunta"
#: webapp/models.py:187
msgid "Committees"
msgstr "Toimikunnat"
#: webapp/models.py:190
msgid "Committee: {}"
msgstr "Toimikunta: {}"
#: webapp/models.py:206
msgid "Role"
msgstr "Rooli"
#: webapp/models.py:212
msgid "Yes"
msgstr "Kyllä"
#: webapp/models.py:212
msgid "No"
msgstr "Ei"
#: webapp/models.py:223
msgid "Occupation"
msgstr "Virka"
#: webapp/models.py:224
msgid "Occupations"
msgstr "Virat"
#: webapp/models.py:226
msgid "Start date"
msgstr "Alkupäivämäärä"
#: webapp/models.py:227
msgid "End date"
msgstr "Loppupäivämäärä"
#: webapp/models.py:244
msgid "Official"
msgstr "Toimihenkilö"
#: webapp/models.py:245
msgid "Officials"
msgstr "Toimihenkilöt"
#: webapp/models.py:251
msgid "Email address"
msgstr "Sähköposti"
#: webapp/models.py:277
msgid "JobAd" msgid "JobAd"
msgstr "Työpaikkailmoitus" msgstr "Työpaikkailmoitus"
#: webapp/models.py:278 #: webapp/models.py:186
msgid "JobAds" msgid "JobAds"
msgstr "Työpaikkailmoitukset" msgstr "Työpaikkailmoitukset"
+2 -2
View File
@@ -16,8 +16,8 @@ from sikweb.base import *
# SECURITY WARNING: don't run with debug turned on in production! # SECURITY WARNING: don't run with debug turned on in production!
DEBUG = os.getenv('DEBUG', False) == 'True' DEBUG = os.getenv('DEBUG', False) == 'True'
URL = os.getenv("HOST", "api.sika.sik.party") URL = os.getenv("HOST", "api.sahkoinsinoorikilta.fi")
FRONTEND_URL = os.getenv("FRONTEND_URL", "sika.sik.party") FRONTEND_URL = os.getenv("FRONTEND_URL", "prod.sahkoinsinoorikilta.fi")
ALLOWED_HOSTS = ["localhost", "127.0.0.1", FRONTEND_URL, URL] ALLOWED_HOSTS = ["localhost", "127.0.0.1", FRONTEND_URL, URL]
if DEBUG: if DEBUG:
ALLOWED_HOSTS = ["*"] ALLOWED_HOSTS = ["*"]
+2 -2
View File
@@ -27,8 +27,8 @@ services:
- 8000:8000 - 8000:8000
environment: environment:
- HOST=api.dev.sik.party - HOST=api.dev.sahkoinsinoorikilta.fi
- FRONTEND_URL=dev.sik.party - FRONTEND_URL=dev.sahkoinsinoorikilta.fi
- DEBUG=True - DEBUG=True
- EMAIL_API_KEY_FILE=/run/secrets/DJANGO_EMAIL_API_KEY - EMAIL_API_KEY_FILE=/run/secrets/DJANGO_EMAIL_API_KEY
- EMAIL_API_SECRET_FILE=/run/secrets/DJANGO_EMAIL_API_SECRET - EMAIL_API_SECRET_FILE=/run/secrets/DJANGO_EMAIL_API_SECRET
+2 -2
View File
@@ -46,8 +46,8 @@ services:
- TG_BOT_TOKEN_FILE=/run/secrets/BACKEND_TG_BOT_TOKEN - TG_BOT_TOKEN_FILE=/run/secrets/BACKEND_TG_BOT_TOKEN
- DB_USER_FILE=/run/secrets/BACKEND_DB_USER - DB_USER_FILE=/run/secrets/BACKEND_DB_USER
- DB_PASSWD_FILE=/run/secrets/BACKEND_DB_PASSWD - DB_PASSWD_FILE=/run/secrets/BACKEND_DB_PASSWD
- HOST=api.sika.sik.party - HOST=api.sahkoinsinoorikilta.fi
- FRONTEND_URL=sika.sik.party - FRONTEND_URL=prod.sahkoinsinoorikilta.fi
- DB_HOST=db - DB_HOST=db
- DB_PORT=5432 - DB_PORT=5432
- EMAIL_API_KEY_FILE=/run/secrets/BACKEND_EMAIL_API_KEY - EMAIL_API_KEY_FILE=/run/secrets/BACKEND_EMAIL_API_KEY
@@ -0,0 +1,33 @@
# Generated by Django 2.1.5 on 2021-01-14 19:55
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('webapp', '0074_signup_deleted'),
]
operations = [
migrations.AddField(
model_name='event',
name='deleted',
field=models.BooleanField(default=False),
),
migrations.AddField(
model_name='feed',
name='deleted',
field=models.BooleanField(default=False),
),
migrations.AddField(
model_name='jobad',
name='deleted',
field=models.BooleanField(default=False),
),
migrations.AddField(
model_name='signupform',
name='deleted',
field=models.BooleanField(default=False),
),
]
+16 -4
View File
@@ -55,9 +55,11 @@ class Feed(BaseFeed):
publish_time = models.DateTimeField(default=timezone.now) publish_time = models.DateTimeField(default=timezone.now)
autohide = models.DateTimeField(default=month_from_now) autohide = models.DateTimeField(default=month_from_now)
autohide_enabled = models.BooleanField(default=False) autohide_enabled = models.BooleanField(default=False)
deleted = models.BooleanField(default=False)
def __str__(self): def __str__(self):
return _('Feed: {}').format(self.title) delete_str = _("Deleted: ") if self.deleted else ""
return _('{}Feed: {}').format(delete_str, self.title)
class Event(BaseFeed): class Event(BaseFeed):
@@ -72,9 +74,11 @@ class Event(BaseFeed):
signupForm = models.ManyToManyField( signupForm = models.ManyToManyField(
'SignupForm', blank=True, related_name="event") 'SignupForm', blank=True, related_name="event")
location = models.CharField(max_length=255, blank=True) location = models.CharField(max_length=255, blank=True)
deleted = models.BooleanField(default=False)
def __str__(self): def __str__(self):
return _('Event: {}').format(self.title) delete_str = _("Deleted: ") if self.deleted else ""
return _('{}Event: {}').format(delete_str, self.title)
class TemplateQuestion(models.Model): class TemplateQuestion(models.Model):
@@ -109,9 +113,11 @@ class SignupForm(models.Model):
visible = models.BooleanField(default=True) visible = models.BooleanField(default=True)
quota = models.PositiveIntegerField(blank=True, null=True) quota = models.PositiveIntegerField(blank=True, null=True)
email_content = models.TextField(blank=True) email_content = models.TextField(blank=True)
deleted = models.BooleanField(default=False)
def __str__(self): def __str__(self):
return _('#{} {}').format(self.id, self.title) delete_str = _("Deleted: ") if self.deleted else ""
return _('#{} {}{}').format(self.id, delete_str, self.title)
@property @property
def signups(self): def signups(self):
@@ -143,7 +149,8 @@ class Signup(models.Model):
deleted = models.BooleanField(default=False) deleted = models.BooleanField(default=False)
def __str__(self): def __str__(self):
return f"{self.signupForm}: {self.list_name} ({self.pk})" delete_str = _("Deleted: ") if self.deleted else ""
return f"{self.signupForm}: {delete_str}{self.list_name} ({self.pk})"
@receiver(post_save, sender=Signup) @receiver(post_save, sender=Signup)
@@ -185,6 +192,11 @@ class JobAd(models.Model):
created_at = models.DateTimeField(default=timezone.now) created_at = models.DateTimeField(default=timezone.now)
autohide_at = models.DateTimeField(default=month_from_now) autohide_at = models.DateTimeField(default=month_from_now)
autohide_enabled = models.BooleanField(default=False) autohide_enabled = models.BooleanField(default=False)
deleted = models.BooleanField(default=False)
def __str__(self):
delete_str = _("Deleted: ") if self.deleted else ""
return f'{delete_str}{self.title}'
auditlog.register(Tag) auditlog.register(Tag)
+4 -2
View File
@@ -171,5 +171,7 @@ class EventTestCase(APITestCase):
# Authenticate # Authenticate
self.client.force_authenticate(user=self.authClient) self.client.force_authenticate(user=self.authClient)
response = self.client.delete(f"{URL}{self.testEventId}/") response = self.client.delete(f"{URL}{self.testEventId}/")
self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT) # Soft delete
self.assertEqual(Event.objects.count(), 3) self.assertEqual(response.status_code, status.HTTP_200_OK)
self.assertEqual(Event.objects.count(), 4)
self.assertEqual(Event.objects.get(id=self.testEventId).deleted, True)
+20 -3
View File
@@ -6,6 +6,8 @@ from webapp.models import Feed
from webapp.serializers import FeedSerializer from webapp.serializers import FeedSerializer
from webapp.tests.tag_fixture import tagBuilder from webapp.tests.tag_fixture import tagBuilder
URL = "/api/feed/"
class FeedTestCase(APITestCase): class FeedTestCase(APITestCase):
@@ -19,11 +21,13 @@ class FeedTestCase(APITestCase):
self.assertEqual(Feed.objects.count(), 1) self.assertEqual(Feed.objects.count(), 1)
self.assertEqual(Feed.objects.all()[0].tags.count(), 2) self.assertEqual(Feed.objects.all()[0].tags.count(), 2)
self.feedId = feed.id
username, password = "test_admin", "password123" username, password = "test_admin", "password123"
self.authClient = User.objects.create_superuser(username, "myemail@test.com", password) self.authClient = User.objects.create_superuser(username, "myemail@test.com", password)
def test_get_feed(self): def test_get_feed(self):
response = self.client.get("/api/feed/", format="json") response = self.client.get(URL, format="json")
self.assertTrue(status.is_success(response.status_code)) self.assertTrue(status.is_success(response.status_code))
feeds = Feed.objects.all() feeds = Feed.objects.all()
@@ -47,15 +51,28 @@ class FeedTestCase(APITestCase):
"content_en": "lorem ipsum" "content_en": "lorem ipsum"
} }
# Try post without authentication # Try post without authentication
response = self.client.post("/api/feed/", data, format="json") response = self.client.post(URL, data, format="json")
self.assertEqual(response.status_code, status.HTTP_401_UNAUTHORIZED) self.assertEqual(response.status_code, status.HTTP_401_UNAUTHORIZED)
self.assertEqual(Feed.objects.count(), 1) self.assertEqual(Feed.objects.count(), 1)
# Authenticate # Authenticate
self.client.force_authenticate(user=self.authClient) self.client.force_authenticate(user=self.authClient)
response = self.client.post("/api/feed/", data, format="json") response = self.client.post(URL, data, format="json")
# Return success and check object was created # Return success and check object was created
self.assertEqual(response.status_code, status.HTTP_201_CREATED) self.assertEqual(response.status_code, status.HTTP_201_CREATED)
self.assertEqual(Feed.objects.count(), 2) self.assertEqual(Feed.objects.count(), 2)
created = Feed.objects.get(title_fi="testtitle") created = Feed.objects.get(title_fi="testtitle")
self.assertEqual(created.tags.count(), 2) self.assertEqual(created.tags.count(), 2)
def test_post_delete(self):
response = self.client.delete(f"{URL}{self.feedId}/",)
self.assertEqual(response.status_code, status.HTTP_401_UNAUTHORIZED)
self.assertEqual(Feed.objects.count(), 1)
# Authenticate
self.client.force_authenticate(user=self.authClient)
response = self.client.delete(f"{URL}{self.feedId}/")
# Soft delete
self.assertEqual(response.status_code, status.HTTP_200_OK)
self.assertEqual(Feed.objects.count(), 1)
self.assertEqual(Feed.objects.get(id=self.feedId).deleted, True)
+53 -16
View File
@@ -39,7 +39,7 @@ class RootView(routers.APIRootView):
class EventViewSet(ModelViewSet): class EventViewSet(ModelViewSet):
queryset = Event.objects.all() queryset = Event.objects.filter(deleted=False)
ordering = ["start_time"] ordering = ["start_time"]
serializer_class = EventSerializer serializer_class = EventSerializer
permission_classes = [IsAuthenticatedOrReadOnly] permission_classes = [IsAuthenticatedOrReadOnly]
@@ -53,17 +53,17 @@ class EventViewSet(ModelViewSet):
if self.request.user.is_authenticated or \ if self.request.user.is_authenticated or \
self.request.method == 'POST' or \ self.request.method == 'POST' or \
self.request.method == 'PUT': self.request.method == 'PUT':
return Event.objects.all().prefetch_related( return Event.objects.filter(deleted=False).prefetch_related(
Prefetch('signupForm', queryset=SignupForm.objects.all(), to_attr='filtered_signup_forms') Prefetch('signupForm', queryset=SignupForm.objects.filter(deleted=False), to_attr='filtered_signup_forms')
) )
since = self.request.query_params.get('since', None) since = self.request.query_params.get('since', None)
if since: if since:
return Event.objects.filter(visible=True, end_time__gt=since).order_by('start_time').prefetch_related( return Event.objects.filter(deleted=False, visible=True, end_time__gt=since).order_by('start_time').prefetch_related(
Prefetch('signupForm', queryset=SignupForm.objects.filter(visible=True), to_attr='filtered_signup_forms') Prefetch('signupForm', queryset=SignupForm.objects.filter(deleted=False, visible=True), to_attr='filtered_signup_forms')
) )
return Event.objects.filter(visible=True, end_time__gt=timezone.now()).order_by('start_time').prefetch_related( return Event.objects.filter(deleted=False, visible=True, end_time__gt=timezone.now()).order_by('start_time').prefetch_related(
Prefetch('signupForm', queryset=SignupForm.objects.filter(visible=True), to_attr='filtered_signup_forms') Prefetch('signupForm', queryset=SignupForm.objects.filter(deleted=False, visible=True), to_attr='filtered_signup_forms')
) )
def create(self, request, *args, **kwargs): def create(self, request, *args, **kwargs):
@@ -84,9 +84,19 @@ class EventViewSet(ModelViewSet):
}) })
return super().update(request, *args, **kwargs) return super().update(request, *args, **kwargs)
def destroy(self, request, pk=None, *args, **kwargs):
try:
event = self.get_object()
event.deleted = True
event.save()
return JsonResponse(status=200, data={"message": "OK"})
except ObjectDoesNotExist:
return JsonResponse(status=404, data={"error": f"Event {pk} not found"})
class SignupFormViewSet(ModelViewSet): class SignupFormViewSet(ModelViewSet):
queryset = SignupForm.objects.all() queryset = SignupForm.objects.filter(deleted=False)
ordering = ["start_time"]
serializer_class = SignupFormSerializer serializer_class = SignupFormSerializer
permission_classes = [IsAuthenticatedOrReadOnly] permission_classes = [IsAuthenticatedOrReadOnly]
@@ -102,8 +112,17 @@ class SignupFormViewSet(ModelViewSet):
def get_queryset(self): def get_queryset(self):
if self.request.user.is_authenticated: if self.request.user.is_authenticated:
return SignupForm.objects.all().order_by('start_time') return SignupForm.objects.filter(deleted=False).order_by('start_time')
return SignupForm.objects.filter(visible=True, end_time__gt=timezone.now()).order_by('start_time') return SignupForm.objects.filter(deleted=False, visible=True, end_time__gt=timezone.now()).order_by('start_time')
def destroy(self, request, pk=None, *args, **kwargs):
try:
form = self.get_object()
form.deleted = True
form.save()
return JsonResponse(status=200, data={"message": "OK"})
except ObjectDoesNotExist:
return JsonResponse(status=404, data={"error": f"SignupForm {pk} not found"})
@action(detail=True, methods=['post'], permission_classes=[IsAuthenticated]) @action(detail=True, methods=['post'], permission_classes=[IsAuthenticated])
def sendemail(self, request, pk=None, *args, **kwargs): def sendemail(self, request, pk=None, *args, **kwargs):
@@ -202,7 +221,7 @@ class SavedQuestionsViewSet(ModelViewSet):
class FeedViewSet(ModelViewSet): class FeedViewSet(ModelViewSet):
queryset = Feed.objects.all() queryset = Feed.objects.filter(deleted=False)
serializer_class = FeedSerializer serializer_class = FeedSerializer
permission_classes = [IsAuthenticatedOrReadOnly] permission_classes = [IsAuthenticatedOrReadOnly]
# filter_backends = (filters.DjangoFilterBackend, SearchFilter, OrderingFilter) # filter_backends = (filters.DjangoFilterBackend, SearchFilter, OrderingFilter)
@@ -211,9 +230,9 @@ class FeedViewSet(ModelViewSet):
def get_queryset(self): def get_queryset(self):
if self.request.user.is_authenticated: if self.request.user.is_authenticated:
return Feed.objects.all().order_by('publish_time') return Feed.objects.filter(deleted=False).order_by('publish_time')
else: else:
objs = Feed.objects.filter(visible=True).order_by('publish_time') objs = Feed.objects.filter(deleted=False, visible=True).order_by('publish_time')
# TODO: Bad filtering. Rewrite! # TODO: Bad filtering. Rewrite!
result_ids = [] result_ids = []
@@ -226,6 +245,15 @@ class FeedViewSet(ModelViewSet):
return Feed.objects.filter(id__in=result_ids) return Feed.objects.filter(id__in=result_ids)
def destroy(self, request, pk=None, *args, **kwargs):
try:
post = self.get_object()
post.deleted = True
post.save()
return JsonResponse(status=200, data={"message": "OK"})
except ObjectDoesNotExist:
return JsonResponse(status=404, data={"error": f"Post {pk} not found"})
class TagsViewSet(ReadOnlyModelViewSet): class TagsViewSet(ReadOnlyModelViewSet):
queryset = Tag.objects.all() queryset = Tag.objects.all()
@@ -234,14 +262,23 @@ class TagsViewSet(ReadOnlyModelViewSet):
class JobAdViewSet(ModelViewSet): class JobAdViewSet(ModelViewSet):
queryset = JobAd.objects.all() queryset = JobAd.objects.filter(deleted=False)
serializer_class = JobAdSerializer serializer_class = JobAdSerializer
permission_classes = [IsAuthenticatedOrReadOnly] permission_classes = [IsAuthenticatedOrReadOnly]
def get_queryset(self): def get_queryset(self):
if self.request.user.is_authenticated: if self.request.user.is_authenticated:
return JobAd.objects.all() return JobAd.objects.filter(deleted=False)
return JobAd.objects.filter(visible=True, autohide_at__gt=timezone.now()) return JobAd.objects.filter(deleted=False, visible=True, autohide_at__gt=timezone.now())
def destroy(self, request, pk=None, *args, **kwargs):
try:
ad = self.get_object()
ad.deleted = True
ad.save()
return JsonResponse(status=200, data={"message": "OK"})
except ObjectDoesNotExist:
return JsonResponse(status=404, data={"error": f"Job Ad {pk} not found"})
@require_http_methods(["GET"]) @require_http_methods(["GET"])