diff --git a/cms/.dockerignore b/cms/.dockerignore index 7614cf2..671850c 100644 --- a/cms/.dockerignore +++ b/cms/.dockerignore @@ -8,6 +8,7 @@ node_modules .eslintrc.cjs .prettierrc .pretieriignore +.env README.md Dockerfile docker-compose.yaml diff --git a/cms/docker-compose.yaml b/cms/docker-compose.yaml index a6e53cd..30ba713 100644 --- a/cms/docker-compose.yaml +++ b/cms/docker-compose.yaml @@ -7,6 +7,9 @@ services: # - "4025:80" environment: TZ: Asia/Bangkok + API_CMS_URL: "https://bma-ehr-exam.frappet.synology.me/api/v1/cms" + API_QUALIFYING_URL: "https://bma-ehr-exam.frappet.synology.me/api/v1/cms" + API_COMPETITIVE_URL: "/api" labels: - traefik.enable=true - traefik.http.routers.bma-ehr-qualifying-exam-cms.rule=Host(`bma-qualifying.frappet.synology.me`) diff --git a/cms/src/lib/data/CMSDataType.ts b/cms/src/lib/data/CMSDataType.ts index 41155f4..b53e375 100644 --- a/cms/src/lib/data/CMSDataType.ts +++ b/cms/src/lib/data/CMSDataType.ts @@ -29,7 +29,4 @@ export interface CMSInfo{ address:string; divisions:{title:string,url:string}[]; institutes:{title:string,url:string}[]; -} -export const cmsBase="https://bma-ehr-exam.frappet.synology.me/api/v1/cms" -export const competitiveBase="/api" -export const qualifyingBase="https://bma-ehr-exam.frappet.synology.me/api/v1/cms" +} \ No newline at end of file diff --git a/cms/src/routes/+error.svelte b/cms/src/routes/+error.svelte index 383c4af..a3c65c1 100644 --- a/cms/src/routes/+error.svelte +++ b/cms/src/routes/+error.svelte @@ -3,5 +3,5 @@
-

{$page.error?.message}

+

{$page.status} {$page.error?.message}

diff --git a/cms/src/routes/+layout.server.ts b/cms/src/routes/+layout.server.ts index 0c24f42..8d56a78 100644 --- a/cms/src/routes/+layout.server.ts +++ b/cms/src/routes/+layout.server.ts @@ -1,7 +1,7 @@ -import {cmsBase} from '$lib/data/CMSDataType' +import { env } from '$env/dynamic/private' import type { PageServerLoad } from './$types' export const load: PageServerLoad = async ({fetch}) => { - const res = await fetch(cmsBase+"/home") + const res = await fetch(env.API_CMS_URL+"/home") if(!res.ok) { console.log("load offline data instead") diff --git a/cms/src/routes/+page.server.ts b/cms/src/routes/+page.server.ts index 5dc75b9..de25030 100644 --- a/cms/src/routes/+page.server.ts +++ b/cms/src/routes/+page.server.ts @@ -1,23 +1,23 @@ -import {cmsBase,qualifyingBase,competitiveBase} from '$lib/data/CMSDataType' +import { env } from '$env/dynamic/private' import { error } from '@sveltejs/kit'; import type { PageServerLoad } from './$types'; import type {Exam} from '$lib/data/CMSDataType' import dayjs from 'dayjs' export const load: PageServerLoad = async ({fetch}) => { - let res = await fetch(cmsBase+"/home") + let res = await fetch(env.API_CMS_URL+"/home") let info if(!res.ok) { - console.log("load offline CMS data instead") + console.log(res.status,"load offline CMS data instead") info = (await import('$lib/data/info.json')).default }else{ info = await res.json() } const {title,subtitle} = info - res = await fetch(cmsBase+"/content/home") + res = await fetch(env.API_CMS_URL+"/content/home") if(!res.ok){ - console.log("load offline home content instead") + console.log(res.status,"load offline home content instead") const content = (await import('$lib/data/content/home.html?raw')).default info = {content,image:"/images/pattern.png"} }else{ @@ -29,7 +29,8 @@ export const load: PageServerLoad = async ({fetch}) => { async function loadExam(api_path:string,err_msg:string){ const res = await fetch(api_path) if(!res.ok){ - throw error(500, err_msg); + console.log(res.status,err_msg,res.statusText) + throw error(res.status, err_msg); } const exams:Exam[] = await res.json() exams.forEach((e)=>{ @@ -42,8 +43,8 @@ export const load: PageServerLoad = async ({fetch}) => { } return exams } - const qualify_exams = loadExam(qualifyingBase+"/qualifying?limit=3",'ไม่สามารถอ่านรายการสอบคัดเลือกได้') - const competitive_exams = loadExam(competitiveBase+"/competitive?limit=3",'ไม่สามารถอ่านรายการสอบแข่งขันได้') + const qualify_exams = loadExam(env.API_QUALIFYING_URL +"/qualifying?limit=3",'ไม่สามารถอ่านรายการสอบคัดเลือกได้') + const competitive_exams = loadExam(env.API_COMPETITIVE_URL+"/competitive?limit=3",'ไม่สามารถอ่านรายการสอบแข่งขันได้') return {title,subtitle,content,image, qualify_exams,competitive_exams }; }; diff --git a/cms/src/routes/about/+page.server.ts b/cms/src/routes/about/+page.server.ts index d63be43..2850757 100644 --- a/cms/src/routes/about/+page.server.ts +++ b/cms/src/routes/about/+page.server.ts @@ -1,8 +1,8 @@ -import {cmsBase} from '$lib/data/CMSDataType' +import { env } from '$env/dynamic/private' import type { PageServerLoad } from './$types'; import { error } from '@sveltejs/kit'; export const load = (async ({fetch}) => { - const res = await fetch(cmsBase+"/content/about") + const res = await fetch(env.API_CMS_URL+"/content/about") if(!res.ok) throw error(500, 'ไม่สามารถอ่านเนื้อหาหน้าเกี่ยวกับได้'); const {content} = await res.json() diff --git a/cms/src/routes/api/content/[page]/+server.ts b/cms/src/routes/api/content/[page]/+server.ts new file mode 100644 index 0000000..b7f6864 --- /dev/null +++ b/cms/src/routes/api/content/[page]/+server.ts @@ -0,0 +1,23 @@ +import type { RequestEvent, RequestHandler } from './$types' +import {json} from '@sveltejs/kit' +export const GET: RequestHandler = async ({params}: RequestEvent) => { + let content = "" + let image + const page:string = params.page + switch (page) { + case "home": + content = (await import('$lib/data/content/home.html?raw')).default + image = "/images/pattern.png" + break; + case "qualifying": + content = (await import('$lib/data/content/qualifying.html?raw')).default + break; + case "competitive": + content = (await import('$lib/data/content/competitive.html?raw')).default + break; + case "about": + content = (await import('$lib/data/content/about.html?raw')).default + break; + } + return json({content,image}) +} diff --git a/cms/src/routes/api/info/+server.ts b/cms/src/routes/api/home/+server.ts similarity index 100% rename from cms/src/routes/api/info/+server.ts rename to cms/src/routes/api/home/+server.ts diff --git a/cms/src/routes/competitive/+page.server.ts b/cms/src/routes/competitive/+page.server.ts index 057c8fe..407c1bb 100644 --- a/cms/src/routes/competitive/+page.server.ts +++ b/cms/src/routes/competitive/+page.server.ts @@ -1,11 +1,11 @@ -import {competitiveBase} from '$lib/data/CMSDataType' +import { env } from '$env/dynamic/private' import { error } from '@sveltejs/kit'; import type {CalendarEvent,Exam} from '$lib/data/CMSDataType' import {getBgColorDict} from '$lib/utils' import dayjs from 'dayjs' import type { PageServerLoad } from './$types' export const load: PageServerLoad = async ({fetch}) => { - const res = await fetch(competitiveBase+"/competitive") + const res = await fetch(env.API_COMPETITIVE_URL+"/competitive") if(!res.ok) throw error(res.status, 'ไม่สามารถอ่านข้อมูลการสอบได้'); diff --git a/cms/src/routes/competitive/[id]/+page.server.ts b/cms/src/routes/competitive/[id]/+page.server.ts index 8d4d313..2c7d0e7 100644 --- a/cms/src/routes/competitive/[id]/+page.server.ts +++ b/cms/src/routes/competitive/[id]/+page.server.ts @@ -1,11 +1,11 @@ -import {competitiveBase} from '$lib/data/CMSDataType' +import { env } from '$env/dynamic/private' import type {Exam} from '$lib/data/CMSDataType' import { error } from '@sveltejs/kit' import dayjs from 'dayjs' import type { PageServerLoad } from './$types' export const load: PageServerLoad = async ({params,fetch}) => { const id = params.id+"" - const res = await fetch(competitiveBase+"/competitive/"+id) + const res = await fetch(env.API_COMPETITIVE_URL+"/competitive/"+id) if(res.status==404){ throw error(404,{message:`ค้นหาข้อมูลสอบคัดเลือก ${id}ไม่พบ`}) } diff --git a/cms/src/routes/qualifying/+page.server.ts b/cms/src/routes/qualifying/+page.server.ts index b4db73c..3f6ebf9 100644 --- a/cms/src/routes/qualifying/+page.server.ts +++ b/cms/src/routes/qualifying/+page.server.ts @@ -1,11 +1,11 @@ -import {qualifyingBase} from '$lib/data/CMSDataType' +import { env } from '$env/dynamic/private' import { error } from '@sveltejs/kit'; import type {CalendarEvent,Exam} from '$lib/data/CMSDataType' import {getBgColorDict} from '$lib/utils' import dayjs from 'dayjs' import type { PageServerLoad } from './$types' export const load: PageServerLoad = async ({fetch}) => { - const res = await fetch(qualifyingBase+"/qualifying") + const res = await fetch(env.API_QUALIFYING_URL+"/qualifying") if(!res.ok) throw error(res.status, 'ไม่สามารถอ่านข้อมูลการสอบได้'); const exams:Exam[] = await res.json() @@ -21,8 +21,7 @@ export const load: PageServerLoad = async ({fetch}) => { const url = "/qualifying/"+id if(start){ ex.date = dayjs(start).format("DD MMM BBBB") - console.log({id,title,start,end,url,backgroundColor}) - events.push({id,title,start,url,backgroundColor}) + events.push({id,title,start,end,url,backgroundColor}) } if(ex.exam_date){ events.push({id,"title":"วันสอบคัดเลือก","start":ex.exam_date,url,backgroundColor}) diff --git a/cms/src/routes/qualifying/[id]/+page.server.ts b/cms/src/routes/qualifying/[id]/+page.server.ts index 785672e..b336e64 100644 --- a/cms/src/routes/qualifying/[id]/+page.server.ts +++ b/cms/src/routes/qualifying/[id]/+page.server.ts @@ -1,11 +1,11 @@ -import {qualifyingBase} from '$lib/data/CMSDataType' +import { env } from '$env/dynamic/private' import type {Exam} from '$lib/data/CMSDataType' import { error } from '@sveltejs/kit' import dayjs from 'dayjs' import type { PageServerLoad } from './$types' export const load: PageServerLoad = async ({params,fetch}) => { const id = params.id+"" - const res = await fetch(qualifyingBase+"/qualifying/"+id) + const res = await fetch(env.API_QUALIFYING_URL+"/qualifying/"+id) if(res.status==404){ throw error(404,{message:`ค้นหาข้อมูลสอบคัดเลือก ${id}ไม่พบ`}) }