Skip to content

Commit d8b2a4e

Browse files
Chaos 617 create campaign nextjs (#619)
* left required image upload and chopped frontend design to fix * fixed required image upload, and fixed abit of frontend, creating pr * add slug to new campaign form * don't force proper slug on manual edit * add indexes to join columns * fix duplicate index on `ranking_answer_rankings` table * remove `UNIQUE` on join column indexes * add required `UNIQUE` constraints * fix seeding application users --------- Co-authored-by: Kavika <kavika.palletenne@devsoc.app>
1 parent 78b8aaa commit d8b2a4e

27 files changed

+3591
-41
lines changed

backend/database-seeding/src/seeder.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -226,7 +226,7 @@ pub async fn seed_database(mut seeder: Seeder) {
226226

227227
let application_id_1 = Application::create(
228228
campaign_id,
229-
3,
229+
2,
230230
NewApplication {
231231
applied_roles: vec![
232232
ApplicationRole {

backend/migrations/20240406024211_create_organisations.sql

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ CREATE TABLE organisations (
88
);
99

1010
CREATE TYPE organisation_role AS ENUM ('User', 'Admin');
11+
CREATE UNIQUE INDEX IDX_organisations_slug on organisations(slug);
1112

1213
CREATE TABLE organisation_members (
1314
id BIGSERIAL PRIMARY KEY,
@@ -22,4 +23,4 @@ CREATE TABLE organisation_members (
2223
);
2324

2425

25-
CREATE INDEX IDX_organisation_admins_organisation on organisation_members(organisation_id);
26+
CREATE INDEX IDX_organisation_members_organisation on organisation_members(organisation_id);

backend/migrations/20240406025537_create_campaigns.sql

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,9 @@ CREATE TABLE campaigns (
1717
UNIQUE (organisation_id, slug)
1818
);
1919

20+
CREATE INDEX IDX_campaigns_organisation on campaigns(organisation_id);
21+
CREATE INDEX IDX_campaigns_slug on campaigns(slug);
22+
2023
CREATE TABLE campaign_roles (
2124
id BIGINT PRIMARY KEY,
2225
campaign_id BIGINT NOT NULL,

backend/migrations/20240406031400_create_questions.sql

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ CREATE TABLE questions (
1717
ON UPDATE CASCADE
1818
);
1919

20+
CREATE INDEX IDX_questions_campaign on questions(campaign_id);
21+
2022
CREATE TABLE multi_option_question_options (
2123
id BIGINT PRIMARY KEY,
2224
text TEXT NOT NULL,
@@ -31,7 +33,7 @@ CREATE TABLE multi_option_question_options (
3133
UNIQUE (question_id, display_order)
3234
);
3335

34-
CREATE INDEX IDX_multi_option_question_options_questions on multi_option_question_options(question_id);
36+
CREATE INDEX IDX_multi_option_question_options_question on multi_option_question_options(question_id);
3537

3638
CREATE TABLE question_roles (
3739
id BIGSERIAL PRIMARY KEY,
@@ -52,5 +54,5 @@ CREATE TABLE question_roles (
5254
UNIQUE (question_id, role_id)
5355
);
5456

55-
CREATE INDEX IDX_question_roles_questions on question_roles(question_id);
56-
CREATE INDEX IDX_question_roles_roles on question_roles(role_id);
57+
CREATE INDEX IDX_question_roles_question on question_roles(question_id);
58+
CREATE INDEX IDX_question_roles_role on question_roles(role_id);

backend/migrations/20240406031915_create_applications.sql

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,13 @@ CREATE TABLE applications (
1818
FOREIGN KEY(user_id)
1919
REFERENCES users(id)
2020
ON DELETE CASCADE
21-
ON UPDATE CASCADE
21+
ON UPDATE CASCADE,
22+
UNIQUE(user_id, campaign_id)
2223
);
2324

25+
CREATE INDEX IDX_applications_campaign on applications(campaign_id);
26+
CREATE INDEX IDX_applications_user on applications(user_id);
27+
2428
CREATE TABLE application_roles (
2529
id BIGSERIAL PRIMARY KEY,
2630
application_id BIGINT NOT NULL,
@@ -38,8 +42,8 @@ CREATE TABLE application_roles (
3842
ON UPDATE CASCADE
3943
);
4044

41-
CREATE INDEX IDX_application_roles_applications on application_roles (application_id);
42-
CREATE INDEX IDX_application_roles_campaign_roles on application_roles (campaign_role_id);
45+
CREATE INDEX IDX_application_roles_application on application_roles(application_id);
46+
CREATE INDEX IDX_application_roles_campaign_role on application_roles(campaign_role_id);
4347

4448
CREATE TABLE answers (
4549
id BIGINT PRIMARY KEY,
@@ -60,8 +64,8 @@ CREATE TABLE answers (
6064
DEFERRABLE INITIALLY DEFERRED
6165
);
6266

63-
CREATE INDEX IDX_answers_applications on answers (application_id);
64-
CREATE INDEX IDX_answers_questions on answers (question_id);
67+
CREATE INDEX IDX_answers_application on answers(application_id);
68+
CREATE INDEX IDX_answers_question on answers(question_id);
6569

6670
CREATE TABLE short_answer_answers (
6771
id BIGSERIAL PRIMARY KEY,
@@ -74,7 +78,7 @@ CREATE TABLE short_answer_answers (
7478
ON UPDATE CASCADE
7579
);
7680

77-
CREATE INDEX IDX_short_answer_answers_answers on short_answer_answers (answer_id);
81+
CREATE INDEX IDX_short_answer_answers_answer on short_answer_answers(answer_id);
7882

7983
CREATE TABLE multi_option_answer_options (
8084
id BIGSERIAL PRIMARY KEY,
@@ -93,6 +97,9 @@ CREATE TABLE multi_option_answer_options (
9397
ON UPDATE CASCADE
9498
);
9599

100+
CREATE INDEX IDX_multi_option_answer_options_question_option on multi_option_answer_options(option_id);
101+
CREATE INDEX IDX_multi_option_answer_options_answer on multi_option_answer_options(answer_id);
102+
96103
CREATE TABLE ranking_answer_rankings (
97104
id BIGSERIAL PRIMARY KEY,
98105
option_id BIGINT NOT NULL,
@@ -111,8 +118,8 @@ CREATE TABLE ranking_answer_rankings (
111118
ON UPDATE CASCADE
112119
);
113120

114-
CREATE INDEX IDX_multi_option_answer_options_question_options on multi_option_answer_options(option_id);
115-
CREATE INDEX IDX_multi_option_answer_options_answers on multi_option_answer_options(answer_id);
121+
CREATE INDEX IDX_ranking_answer_rankings_question_option on multi_option_answer_options(option_id);
122+
CREATE INDEX IDX_ranking_answer_rankings_answer on multi_option_answer_options(answer_id);
116123

117124
CREATE TABLE application_ratings (
118125
id BIGINT PRIMARY KEY,
@@ -134,5 +141,5 @@ CREATE TABLE application_ratings (
134141
ON UPDATE CASCADE
135142
);
136143

137-
CREATE INDEX IDX_application_ratings_applications on application_ratings(application_id);
138-
CREATE INDEX IDX_application_ratings_users on application_ratings(rater_id);
144+
CREATE INDEX IDX_application_ratings_application on application_ratings(application_id);
145+
CREATE INDEX IDX_application_ratings_user on application_ratings(rater_id);

backend/migrations/20241124054711_email_templates.sql

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,6 @@ CREATE TABLE email_templates (
1010
ON DELETE CASCADE
1111
ON UPDATE CASCADE,
1212
UNIQUE (organisation_id, name)
13-
);
13+
);
14+
15+
CREATE INDEX IDX_email_templates_organisation on email_templates(organisation_id);

backend/migrations/20241126113027_offers.sql

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,4 +29,9 @@ CREATE TABLE offers (
2929
REFERENCES campaign_roles(id)
3030
ON DELETE CASCADE
3131
ON UPDATE CASCADE
32-
);
32+
);
33+
34+
CREATE INDEX IDX_offers_campaign on offers(campaign_id);
35+
CREATE INDEX IDX_offers_application on offers(application_id);
36+
CREATE INDEX IDX_offers_email_template on offers(email_template_id);
37+
CREATE INDEX IDX_offers_role on offers(role_id);

backend/server/src/handler/answer.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
//! - Managing role-specific answers
77
88
use crate::models::answer::{Answer, NewAnswer};
9-
use crate::models::app::{AppMessage, AppState};
9+
use crate::models::app::{AppMessage, AppState, IdMessage};
1010
use crate::models::auth::{AnswerOwner, ApplicationOwner, ApplicationOwnerOrReviewer};
1111
use crate::models::error::ChaosError;
1212
use crate::models::transaction::DBTransaction;
@@ -57,7 +57,7 @@ impl AnswerHandler {
5757

5858
transaction.tx.commit().await?;
5959

60-
Ok((StatusCode::OK, Json(json!({"id": id}))))
60+
Ok((StatusCode::OK, Json(IdMessage { id })))
6161
}
6262

6363
/// Retrieves all common answers for an application.

backend/server/src/handler/organisation.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
//! - Email template management
88
//! - Logo image handling
99
10-
use crate::models::app::{AppMessage, AppState};
10+
use crate::models::app::{AppMessage, AppState, IdMessage};
1111
use crate::models::auth::SuperUser;
1212
use crate::models::auth::{AuthUser, OrganisationAdmin};
1313
use crate::models::campaign::{Campaign, NewCampaign};
@@ -419,7 +419,7 @@ impl OrganisationHandler {
419419
.await?;
420420

421421
transaction.tx.commit().await?;
422-
Ok((StatusCode::OK, Json(json!({ "id": new_campaign_id }))))
422+
Ok((StatusCode::OK, Json(IdMessage { id: new_campaign_id })))
423423
}
424424

425425
/// Checks if a campaign slug is available.

backend/server/src/handler/question.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
//! - Updating and deleting questions
66
//! - Managing role-specific and common questions
77
8-
use crate::models::app::{AppMessage, AppState};
8+
use crate::models::app::{AppMessage, AppState, IdMessage};
99
use crate::models::auth::{AuthUser, CampaignAdmin, QuestionAdmin};
1010
use crate::models::error::ChaosError;
1111
use crate::models::question::{NewQuestion, Question};
@@ -56,7 +56,7 @@ impl QuestionHandler {
5656

5757
transaction.tx.commit().await?;
5858

59-
Ok((StatusCode::OK, Json(json!({"id": id}))))
59+
Ok((StatusCode::OK, Json(IdMessage { id })))
6060
}
6161

6262
/// Retrieves all questions for a specific role in a campaign.

0 commit comments

Comments
 (0)