diff --git a/src/app.css b/src/app.css index ef930f0..3b4adc6 100644 --- a/src/app.css +++ b/src/app.css @@ -38,7 +38,7 @@ body { h1 { color: var(--text-color); - @apply text-4xl + @apply text-4xl } .bg-color { @@ -83,29 +83,26 @@ h1 { .icon-16 { font-size: 16px !important; - font-variation-settings: - 'FILL' 0, - 'wght' 400, - 'GRAD' 0, - 'opsz' 20 + font-variation-settings: 'FILL' 0, + 'wght' 400, + 'GRAD' 0, + 'opsz' 20 } .icon-20 { font-size: 20px !important; - font-variation-settings: - 'FILL' 0, - 'wght' 400, - 'GRAD' 0, - 'opsz' 20 + font-variation-settings: 'FILL' 0, + 'wght' 400, + 'GRAD' 0, + 'opsz' 20 } .icon-48 { font-size: 48px !important; - font-variation-settings: - 'FILL' 0, - 'wght' 400, - 'GRAD' 0, - 'opsz' 20 + font-variation-settings: 'FILL' 0, + 'wght' 400, + 'GRAD' 0, + 'opsz' 20 } input[type='search'], input[type='text'], input[type='password'], input[type='email'], input[type='tel'], input[type='number'], textarea, select { @@ -124,7 +121,7 @@ input[type='search']:focus, input[type='text']:focus, input[type='password']:foc input[type='search']:-webkit-autofill, input[type='text']:-webkit-autofill, input[type='password']:-webkit-autofill, input[type='email']:-webkit-autofill, input[type='tel']:-webkit-autofill, input[type='number']:-webkit-autofill, textarea:-webkit-autofill, select:-webkit-autofill { -webkit-text-fill-color: var(--text-color) !important; - background-clip: text !important; + background-clip: text !important; caret-color: var(--text-color); } @@ -300,8 +297,8 @@ input[type='checkbox']:focus { width: 100%; /* Full width */ height: 100%; /* Full height */ overflow: auto; /* Enable scroll if needed */ - background-color: rgb(0,0,0); /* Fallback color */ - background-color: rgba(0,0,0,0.6); /* Black w/ opacity */ + background-color: rgb(0, 0, 0); /* Fallback color */ + background-color: rgba(0, 0, 0, 0.6); /* Black w/ opacity */ } .modal-always-display { @@ -312,8 +309,8 @@ input[type='checkbox']:focus { width: 100%; /* Full width */ height: 100%; /* Full height */ overflow: auto; /* Enable scroll if needed */ - background-color: rgb(0,0,0); /* Fallback color */ - background-color: rgba(0,0,0,0.6); /* Black w/ opacity */ + background-color: rgb(0, 0, 0); /* Fallback color */ + background-color: rgba(0, 0, 0, 0.6); /* Black w/ opacity */ } /* Modal Content/Box */ diff --git a/src/app.html b/src/app.html index e6fe2f8..c49ea10 100644 --- a/src/app.html +++ b/src/app.html @@ -1,11 +1,11 @@ - + FBLA 25 - - + + %sveltekit.head% diff --git a/src/lib/db/index.server.ts b/src/lib/db/index.server.ts index a49de49..4f719cc 100644 --- a/src/lib/db/index.server.ts +++ b/src/lib/db/index.server.ts @@ -18,9 +18,10 @@ export async function createUser(user: User): Promise { const password_hash: string = await bcrypt.hash(user.password!, 12); const response = await sql` - INSERT INTO users (username, password_hash, perms, created_at, last_signin, active, email, phone, full_name, company_code) - VALUES (${user.username}, ${password_hash}, ${user.perms}, NOW(), NOW(), ${user.active}, ${user.email}, ${user.phone}, ${user.fullName}, ${user.companyCode}) - RETURNING id; + INSERT INTO users (username, password_hash, perms, created_at, last_signin, active, email, phone, full_name, + company_code) + VALUES (${user.username}, ${password_hash}, ${user.perms}, NOW(), NOW(), ${user.active}, ${user.email}, + ${user.phone}, ${user.fullName}, ${user.companyCode}) RETURNING id; `; // TODO: handle custom image uploads @@ -40,17 +41,30 @@ export async function updateUser(user: User): Promise { // Construct the SQL query const response = await sql`UPDATE users - SET - username = ${user.username}, - ${user.perms !== undefined ? sql`perms = ${user.perms},` : sql``} - ${user.active !== undefined ? sql`active = ${user.active},` : sql``} - ${password_hash !== null ? sql`password_hash = ${password_hash},` : sql``} - email = ${user.email}, - phone = ${user.phone}, - full_name = ${user.fullName}, - company_code = ${user.companyCode} - WHERE id = ${user.id} - RETURNING id;`; + SET username = ${user.username}, + ${ + user.perms !== undefined + ? sql`perms + = + ${user.perms},` + : sql`` + } + ${ + user.active !== undefined + ? sql`active + = + ${user.active},` + : sql`` + } ${ + password_hash !== null + ? sql`password_hash + = + ${password_hash},` + : sql`` + } + email = ${user.email}, phone = ${user.phone}, full_name = ${user.fullName}, company_code = ${user.companyCode} + WHERE id = ${user.id} + RETURNING id;`; await saveAvatar(user); @@ -59,9 +73,9 @@ export async function updateUser(user: User): Promise { export async function checkUserCreds(username: string, password: string): Promise { const [user] = await sql` - SELECT id, username, password_hash, perms, active, company_id AS "companyId" - FROM users - WHERE username = ${username} + SELECT id, username, password_hash, perms, active, company_id AS "companyId" + FROM users + WHERE username = ${username} `; if (!user) { @@ -85,7 +99,7 @@ export async function getUsers(searchQuery: string | null = null): Promise { const [user] = await sql` - SELECT id, username, perms, - created_at AT TIME ZONE 'UTC' AS "createdAt", + SELECT id, + username, + perms, + created_at AT TIME ZONE 'UTC' AS "createdAt", last_signin AT TIME ZONE 'UTC' AS "lastSignIn", - active, email, phone, full_name AS "fullName", company_id, company_code - FROM users + active, + email, + phone, + full_name AS "fullName", + company_id, + company_code + FROM users WHERE id = ${id}; `; if (!user) { @@ -134,27 +155,24 @@ export async function getUser(id: number): Promise { export async function getUserWithCompany(id: number): Promise { const [user] = await sql` - SELECT - u.id, - u.username, - u.perms, - u.email, - u.phone, - u.full_name AS "fullName", - u.created_at AT TIME ZONE 'UTC' AS "createdAt", - u.last_signin AT TIME ZONE 'UTC' AS "lastSignIn", - u.active, - c.id AS company_id, - c.name AS company_name, - c.description AS company_description, - c.website AS company_website, - c.created_at AS company_created_at - FROM - users u - LEFT JOIN - companies c ON u.company_id = c.id - WHERE - u.id = ${id}; + SELECT u.id, + u.username, + u.perms, + u.email, + u.phone, + u.full_name AS "fullName", + u.created_at AT TIME ZONE 'UTC' AS "createdAt", + u.last_signin AT TIME ZONE 'UTC' AS "lastSignIn", + u.active, + c.id AS company_id, + c.name AS company_name, + c.description AS company_description, + c.website AS company_website, + c.created_at AS company_created_at + FROM users u + LEFT JOIN + companies c ON u.company_id = c.id + WHERE u.id = ${id}; `; if (!user) { error(404, 'User not found'); @@ -181,48 +199,34 @@ export async function getUserWithCompanyAndApplications( id: number ): Promise<{ user: User; applications: Application[] }> { const data = await sql` - WITH company_data AS ( - SELECT - id, - name, - description, - website, - created_at AT TIME ZONE 'UTC' AS "createdAt" - FROM companies - WHERE id = (SELECT company_id FROM users WHERE id = ${id}) - ), - user_data AS ( - SELECT - id, - username, - perms, - email, - phone, - full_name AS "fullName", - created_at AT TIME ZONE 'UTC' AS "createdAt", - last_signin AT TIME ZONE 'UTC' AS "lastSignIn", - active - FROM users - WHERE "id" = ${id} - ), - application_data AS ( - SELECT - id, - posting_id AS "postingId", - (SELECT title FROM postings WHERE id = posting_id) AS "postingTitle", - created_at AT TIME ZONE 'UTC' AS "createdAt" - FROM applications - WHERE "user_id" = ${id} - ) - SELECT - ( - SELECT row_to_json(company_data) - FROM company_data - ) AS company, - ( - SELECT row_to_json(user_data) - FROM user_data - ) AS user, + WITH company_data AS (SELECT id, + name, + description, + website, + created_at AT TIME ZONE 'UTC' AS "createdAt" + FROM companies + WHERE id = (SELECT company_id FROM users WHERE id = ${id})), + user_data AS (SELECT id, + username, + perms, + email, + phone, + full_name AS "fullName", + created_at AT TIME ZONE 'UTC' AS "createdAt", + last_signin AT TIME ZONE 'UTC' AS "lastSignIn", + active + FROM users + WHERE "id" = ${id}), + application_data AS (SELECT id, + posting_id AS "postingId", + (SELECT title FROM postings WHERE id = posting_id) AS "postingTitle", + created_at AT TIME ZONE 'UTC' AS "createdAt" + FROM applications + WHERE "user_id" = ${id}) + SELECT (SELECT row_to_json(company_data) + FROM company_data) AS company, + (SELECT row_to_json(user_data) + FROM user_data) AS user, ( SELECT json_agg(row_to_json(application_data)) FROM application_data @@ -258,8 +262,9 @@ export async function getUserWithCompanyAndApplications( // should require MANAGE_USERS permission export async function deleteUser(id: number): Promise { await sql` - DELETE FROM users - WHERE id = ${id}; + DELETE + FROM users + WHERE id = ${id}; `; } @@ -274,17 +279,17 @@ export async function getTags(searchQuery: string | null): Promise { export async function updateLastSignin(username: string): Promise { await sql` - UPDATE users - SET last_signin = NOW() - WHERE username = ${username}; + UPDATE users + SET last_signin = NOW() + WHERE username = ${username}; `; } export async function createCompany(company: Company): Promise { const response = await sql` - INSERT INTO companies (name, description, website, created_at, company_code) - VALUES (${company.name}, ${company.description}, ${company.website}, NOW(), generate_company_code(CAST(CURRVAL('companies_id_seq') AS INT))) - RETURNING id; + INSERT INTO companies (name, description, website, created_at, company_code) + VALUES (${company.name}, ${company.description}, ${company.website}, NOW(), + generate_company_code(CAST(CURRVAL('companies_id_seq') AS INT))) RETURNING id; `; await saveLogo(company); @@ -294,10 +299,11 @@ export async function createCompany(company: Company): Promise { export async function editCompany(company: Company): Promise { const response = await sql` - UPDATE companies - SET name = ${company.name}, description = ${company.description}, website = ${company.website} - WHERE id = ${company.id} - RETURNING id; + UPDATE companies + SET name = ${company.name}, + description = ${company.description}, + website = ${company.website} + WHERE id = ${company.id} RETURNING id; `; await saveLogo(company); @@ -307,8 +313,9 @@ export async function editCompany(company: Company): Promise { export async function deleteCompany(id: number): Promise { await sql` - DELETE FROM companies - WHERE id = ${id}; + DELETE + FROM companies + WHERE id = ${id}; `; await deleteLogo({ id: id }); @@ -316,9 +323,9 @@ export async function deleteCompany(id: number): Promise { export async function getCompany(id: number): Promise { const [company] = await sql` - SELECT id, name, description, website, created_at AS "createdAt", company_code AS "companyCode" - FROM companies - WHERE id = ${id}; + SELECT id, name, description, website, created_at AS "createdAt", company_code AS "companyCode" + FROM companies + WHERE id = ${id}; `; if (!company) { @@ -332,56 +339,40 @@ export async function getCompanyFullData( id: number ): Promise<{ company: Company; users: User[]; postings: Posting[] }> { const data = await sql` - WITH company_data AS ( - SELECT - id, - name, - description, - website, - created_at AT TIME ZONE 'UTC' AS "createdAt" - FROM companies - WHERE id = ${id} - ), - user_data AS ( - SELECT - id, - username, - email, - phone, - full_name AS "fullName" - FROM users - WHERE "company_id" = ${id} - ), - posting_data AS ( - SELECT - id, - title, - description, - employer_id AS "employerId", - address, - employment_type AS "employmentType", - wage, - link, - tag_ids AS "tagIds", - created_at AT TIME ZONE 'UTC' AS "createdAt", - updated_at AT TIME ZONE 'UTC' AS "updatedAt", - flyer_link AS "flyerLink" - FROM postings - WHERE "company_id" = ${id} - ) - SELECT - ( - SELECT row_to_json(company_data) - FROM company_data - ) AS company, - ( - SELECT json_agg(row_to_json(user_data)) - FROM user_data - ) AS users, - ( - SELECT json_agg(row_to_json(posting_data)) - FROM posting_data - ) AS postings; + WITH company_data AS (SELECT id, + name, + description, + website, + created_at AT TIME ZONE 'UTC' AS "createdAt" + FROM companies + WHERE id = ${id}), + user_data AS (SELECT id, + username, + email, + phone, + full_name AS "fullName" + FROM users + WHERE "company_id" = ${id}), + posting_data AS (SELECT id, + title, + description, + employer_id AS "employerId", + address, + employment_type AS "employmentType", + wage, + link, + tag_ids AS "tagIds", + created_at AT TIME ZONE 'UTC' AS "createdAt", + updated_at AT TIME ZONE 'UTC' AS "updatedAt", + flyer_link AS "flyerLink" + FROM postings + WHERE "company_id" = ${id}) + SELECT (SELECT row_to_json(company_data) + FROM company_data) AS company, + (SELECT json_agg(row_to_json(user_data)) + FROM user_data) AS users, + (SELECT json_agg(row_to_json(posting_data)) + FROM posting_data) AS postings; `; if (!data) { @@ -432,9 +423,11 @@ export async function createPosting(posting: Posting): Promise { } } const response = await sql` - INSERT INTO postings (title, description, employer_id, address, employment_type, wage, link, tag_ids, created_at, updated_at, flyer_link, company_id) - VALUES (${posting.title}, ${posting.description}, ${posting.employerId}, ${posting.address}, ${posting.employmentType}, ${posting.wage}, ${posting.link}, ${posting.tagIds}, NOW(), NOW(), ${posting.flyerLink}, ${posting.companyId}) - RETURNING id; + INSERT INTO postings (title, description, employer_id, address, employment_type, wage, link, tag_ids, created_at, + updated_at, flyer_link, company_id) + VALUES (${posting.title}, ${posting.description}, ${posting.employerId}, ${posting.address}, + ${posting.employmentType}, ${posting.wage}, ${posting.link}, ${posting.tagIds}, NOW(), NOW(), + ${posting.flyerLink}, ${posting.companyId}) RETURNING id; `; return response[0].id; @@ -456,10 +449,19 @@ export async function editPosting(posting: Posting): Promise { } const response = await sql` - UPDATE postings - SET title = ${posting.title}, description = ${posting.description}, employer_id = ${posting.employerId}, address = ${posting.address}, employment_type = ${posting.employmentType}, wage = ${posting.wage}, link = ${posting.link}, tag_ids = ${posting.tagIds}, updated_at = NOW(), flyer_link = ${posting.flyerLink}, company_id = ${posting.companyId} - WHERE id = ${posting.id} - RETURNING id; + UPDATE postings + SET title = ${posting.title}, + description = ${posting.description}, + employer_id = ${posting.employerId}, + address = ${posting.address}, + employment_type = ${posting.employmentType}, + wage = ${posting.wage}, + link = ${posting.link}, + tag_ids = ${posting.tagIds}, + updated_at = NOW(), + flyer_link = ${posting.flyerLink}, + company_id = ${posting.companyId} + WHERE id = ${posting.id} RETURNING id; `; return response[0].id; @@ -467,8 +469,9 @@ export async function editPosting(posting: Posting): Promise { export async function deletePosting(id: number): Promise { await sql` - DELETE FROM postings - WHERE id = ${id}; + DELETE + FROM postings + WHERE id = ${id}; `; } @@ -476,36 +479,28 @@ export async function getCompanyEmployers( id: number ): Promise<{ company: Company; users: User[] }> { const data = await sql` - WITH company_data AS ( - SELECT - id, - name, - description, - website, - created_at AT TIME ZONE 'UTC' AS "createdAt", - company_code AS "companyCode" - FROM companies - WHERE id = ${id} - ), + WITH company_data AS (SELECT id, + name, + description, + website, + created_at AT TIME ZONE 'UTC' AS "createdAt", + company_code AS "companyCode" + FROM companies + WHERE id = ${id}), user_data AS (SELECT id, username, email, phone, - full_name AS "fullName", - created_at AT TIME ZONE 'UTC' AS "createdAt", + full_name AS "fullName", + created_at AT TIME ZONE 'UTC' AS "createdAt", last_signin AT TIME ZONE 'UTC' AS "lastSignIn", - company_id as "companyId" + company_id as "companyId" FROM users WHERE "company_id" = ${id}) - SELECT - ( - SELECT row_to_json(company_data) - FROM company_data - ) AS company, - ( - SELECT json_agg(row_to_json(user_data)) - FROM user_data - ) AS users; + SELECT (SELECT row_to_json(company_data) + FROM company_data) AS company, + (SELECT json_agg(row_to_json(user_data)) + FROM user_data) AS users; `; if (!data) { @@ -539,50 +534,40 @@ export async function getCompanyEmployersAndRequests( id: number ): Promise<{ company: Company; employers: User[]; requests: User[] }> { const data = await sql` - WITH company_data AS ( - SELECT - id, - name, - description, - website, - created_at AT TIME ZONE 'UTC' AS "createdAt", - company_code AS "companyCode" - FROM companies - WHERE id = ${id} - ), - employer_data AS (SELECT id, - username, - email, - phone, - full_name AS "fullName", - created_at AT TIME ZONE 'UTC' AS "createdAt", - last_signin AT TIME ZONE 'UTC' AS "lastSignIn", - company_id as "companyId" - FROM users - WHERE "company_id" = ${id}), - request_data AS (SELECT id, - username, - email, - phone, - full_name AS "fullName", - created_at AT TIME ZONE 'UTC' AS "createdAt", - last_signin AT TIME ZONE 'UTC' AS "lastSignIn", - company_id as "companyId" - FROM users - WHERE "company_code" = (SELECT company_code FROM companies WHERE id = ${id})) - SELECT - ( - SELECT row_to_json(company_data) - FROM company_data - ) AS company, - ( - SELECT json_agg(row_to_json(employer_data)) - FROM employer_data - ) AS employers, - ( - SELECT json_agg(row_to_json(request_data)) - FROM request_data - ) AS requests; + WITH company_data AS (SELECT id, + name, + description, + website, + created_at AT TIME ZONE 'UTC' AS "createdAt", + company_code AS "companyCode" + FROM companies + WHERE id = ${id}), + employer_data AS (SELECT id, + username, + email, + phone, + full_name AS "fullName", + created_at AT TIME ZONE 'UTC' AS "createdAt", + last_signin AT TIME ZONE 'UTC' AS "lastSignIn", + company_id as "companyId" + FROM users + WHERE "company_id" = ${id}), + request_data AS (SELECT id, + username, + email, + phone, + full_name AS "fullName", + created_at AT TIME ZONE 'UTC' AS "createdAt", + last_signin AT TIME ZONE 'UTC' AS "lastSignIn", + company_id as "companyId" + FROM users + WHERE "company_code" = (SELECT company_code FROM companies WHERE id = ${id})) + SELECT (SELECT row_to_json(company_data) + FROM company_data) AS company, + (SELECT json_agg(row_to_json(employer_data)) + FROM employer_data) AS employers, + (SELECT json_agg(row_to_json(request_data)) + FROM request_data) AS requests; `; if (!data) { @@ -632,18 +617,18 @@ export async function getCompanyEmployersAndRequests( export async function removeEmployerFromCompany(companyId: number, userId: number): Promise { await sql` - UPDATE users - SET company_id = NULL, - company_code = NULL - WHERE id = ${userId}; + UPDATE users + SET company_id = NULL, + company_code = NULL + WHERE id = ${userId}; `; } export async function addEmployerToCompany(companyId: number, userId: number): Promise { await sql` - UPDATE users - SET company_id = ${companyId} - WHERE id = ${userId}; + UPDATE users + SET company_id = ${companyId} + WHERE id = ${userId}; `; } @@ -652,19 +637,19 @@ export async function getPostings(searchQuery: string | null = null): Promise { @@ -691,16 +676,16 @@ export async function getPosting(id: number): Promise { SELECT id, title, description, - employer_id AS "employerId", + employer_id AS "employerId", address, - employment_type AS "employmentType", + employment_type AS "employmentType", wage, link, - tag_ids AS "tagIds", - created_at AT TIME ZONE 'UTC' AS "createdAt", + tag_ids AS "tagIds", + created_at AT TIME ZONE 'UTC' AS "createdAt", updated_at AT TIME ZONE 'UTC' AS "updatedAt", - flyer_link AS "flyerLink", - company_id AS "companyId" + flyer_link AS "flyerLink", + company_id AS "companyId" FROM postings WHERE id = ${id}; `; @@ -726,51 +711,37 @@ export async function getPosting(id: number): Promise { export async function getPostingWithCompanyUser(id: number): Promise { const data = await sql` - WITH company_data AS ( - SELECT - id, - name, - description, - website, - created_at AS "createdAt" - FROM companies - WHERE id = (SELECT company_id FROM postings WHERE id = ${id}) - ), - user_data AS ( - SELECT - username, - email, - phone, - full_name AS "fullName" - FROM users - WHERE "company_id" = (SELECT company_id FROM postings WHERE id = ${id}) - ), - posting_data AS ( - SELECT - id, - title, - description, - employer_id AS "employerId", - address, - employment_type AS "employmentType", - wage, - link, - tag_ids AS "tagIds", - created_at AT TIME ZONE 'UTC' AS "createdAt", - updated_at AT TIME ZONE 'UTC' AS "updatedAt", - flyer_link AS "flyerLink" - FROM postings - WHERE id = ${id} - ) - SELECT - ( - SELECT row_to_json(company_data) - FROM company_data - ) AS company, - ( - SELECT row_to_json(user_data) - FROM user_data - ) AS user, + WITH company_data AS (SELECT id, + name, + description, + website, + created_at AS "createdAt" + FROM companies + WHERE id = (SELECT company_id FROM postings WHERE id = ${id})), + user_data AS (SELECT username, + email, + phone, + full_name AS "fullName" + FROM users + WHERE "company_id" = (SELECT company_id FROM postings WHERE id = ${id})), + posting_data AS (SELECT id, + title, + description, + employer_id AS "employerId", + address, + employment_type AS "employmentType", + wage, + link, + tag_ids AS "tagIds", + created_at AT TIME ZONE 'UTC' AS "createdAt", + updated_at AT TIME ZONE 'UTC' AS "updatedAt", + flyer_link AS "flyerLink" + FROM postings + WHERE id = ${id}) + SELECT (SELECT row_to_json(company_data) + FROM company_data) AS company, + (SELECT row_to_json(user_data) + FROM user_data) AS user, ( SELECT row_to_json(posting_data) FROM posting_data @@ -796,9 +767,8 @@ export async function getPostingWithCompanyUser(id: number): Promise { export async function createApplication(application: Application): Promise { const response = await sql` - INSERT INTO applications (posting_id, user_id, candidate_statement, created_at) - VALUES (${application.postingId}, ${application.userId}, ${application.candidateStatement}, NOW()) - RETURNING id; + INSERT INTO applications (posting_id, user_id, candidate_statement, created_at) + VALUES (${application.postingId}, ${application.userId}, ${application.candidateStatement}, NOW()) RETURNING id; `; sendEmployerNotificationEmail(application.postingId).catch((err) => { @@ -808,9 +778,10 @@ export async function createApplication(application: Application): Promise { - const response = await sql` - DELETE FROM applications - WHERE id = ${id}; + await sql` + DELETE + FROM applications + WHERE id = ${id}; `; } @@ -819,23 +790,24 @@ export async function deleteApplicationWithUser( userId: number ): Promise { console.log(applicationId, userId); - const response = await sql` - DELETE FROM applications - WHERE id = ${applicationId} AND user_id = ${userId}; + await sql` + DELETE + FROM applications + WHERE id = ${applicationId} + AND user_id = ${userId}; `; } export async function getApplications(postingId: number): Promise { const data = await sql` - SELECT - a.id, - a.candidate_statement AS "candidateStatement", - a.created_at AS "createdAt", - u.id AS "userId", - u.username, - u.email, - u.phone, - u.full_name AS "fullName" + SELECT a.id, + a.candidate_statement AS "candidateStatement", + a.created_at AS "createdAt", + u.id AS "userId", + u.username, + u.email, + u.phone, + u.full_name AS "fullName" FROM applications a JOIN users u ON a.user_id = u.id WHERE a.posting_id = ${postingId}; @@ -876,19 +848,14 @@ export async function getNotificationInfo( postingId: number ): Promise<{ title: string; emails: string[] }> { const data = await sql` - WITH posting_data AS ( - SELECT title, company_id - FROM postings - WHERE id = ${postingId} - ), - user_emails AS ( - SELECT email - FROM users - WHERE company_id = (SELECT company_id FROM posting_data) - ) - SELECT - (SELECT title FROM posting_data) AS title, - (SELECT json_agg(email) FROM user_emails) AS emails; + WITH posting_data AS (SELECT title, company_id + FROM postings + WHERE id = ${postingId}), + user_emails AS (SELECT email + FROM users + WHERE company_id = (SELECT company_id FROM posting_data)) + SELECT (SELECT title FROM posting_data) AS title, + (SELECT json_agg(email) FROM user_emails) AS emails; `; if (!data || !data[0]) { diff --git a/src/routes/+error.svelte b/src/routes/+error.svelte index cdd6aeb..59290ed 100644 --- a/src/routes/+error.svelte +++ b/src/routes/+error.svelte @@ -2,11 +2,11 @@ import { page } from '$app/stores'; -
+

{$page.status}

-

Thats an error

+

That's an error

{#if $page.status === 404}

We cant seem to find the page you are looking for.

The address may be mistyped, or the page may have moved or been deleted.

diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte index a634bef..b466694 100644 --- a/src/routes/+layout.svelte +++ b/src/routes/+layout.svelte @@ -35,19 +35,19 @@
- + >Sign out +
@@ -217,17 +214,17 @@ {#if resumeState} + >open_in_new View résumé + + >upload Upload new version + {:else}
No résumé submitted.
+ >upload Upload + {/if}
@@ -258,8 +255,9 @@ onclick={() => { applicationToDelete = application.id; openConfirm(); - }}>delete + }} + >delete +
{/each}
@@ -267,7 +265,7 @@
-