diff --git a/front/src/api/floris/constants.ts b/front/src/api/floris/constants.ts new file mode 100644 index 0000000..fd812c1 --- /dev/null +++ b/front/src/api/floris/constants.ts @@ -0,0 +1,2 @@ +// export const BASE_URL = 'http://localhost:8000/api'; +export const BASE_URL = 'http://192.168.1.110:8000/api'; diff --git a/front/src/api/floris/index.ts b/front/src/api/floris/index.ts index e69de29..e34a0bf 100644 --- a/front/src/api/floris/index.ts +++ b/front/src/api/floris/index.ts @@ -0,0 +1 @@ +export { downloadImage, getWindmillData } from './service'; diff --git a/front/src/api/floris/service.ts b/front/src/api/floris/service.ts new file mode 100644 index 0000000..6e18fa6 --- /dev/null +++ b/front/src/api/floris/service.ts @@ -0,0 +1,26 @@ +import { WindmillFormStore } from '@components/ux/windmill-form'; + +import { BASE_URL } from './constants'; +import { GetWindmillDataRes } from './types'; +import { getWindmillDataParams } from './utils'; + +export const getWindmillData = async (store: Partial) => { + const params = getWindmillDataParams(store); + const url = `${BASE_URL}/floris/get_windmill_data?${params}`; + const init: RequestInit = { + method: 'GET', + }; + const res: Response = await fetch(url, init); + const data: GetWindmillDataRes = await res.json(); + return data; +}; + +export const downloadImage = async (imageName: string) => { + const url = `${BASE_URL}/floris/download_image/${imageName}`; + const init: RequestInit = { + method: 'GET', + }; + const res: Response = await fetch(url, init); + const data = await res.blob(); + return data; +}; diff --git a/front/src/api/floris/types.ts b/front/src/api/floris/types.ts new file mode 100644 index 0000000..ff20ef1 --- /dev/null +++ b/front/src/api/floris/types.ts @@ -0,0 +1,4 @@ +export type GetWindmillDataRes = { + file_name: string; + data: number[]; +}; diff --git a/front/src/api/floris/utils.ts b/front/src/api/floris/utils.ts new file mode 100644 index 0000000..7e7650c --- /dev/null +++ b/front/src/api/floris/utils.ts @@ -0,0 +1,9 @@ +import { WindmillFormStore } from '@components/ux/windmill-form'; + +export const getWindmillDataParams = (store: Partial) => { + const layoutX = store.windmills?.map((row) => `layout_x=${row.x}`).join('&'); + const layoutY = store.windmills?.map((row) => `layout_y=${row.y}`).join('&'); + const dateStart = `date_start=${store.dateFrom?.substring(0, 10)}`; + const dateEnd = `date_end=${store.dateTo?.substring(0, 10)}`; + return `${layoutX}&${layoutY}&${dateStart}&${dateEnd}`; +}; diff --git a/front/src/api/index.tsx b/front/src/api/index.tsx new file mode 100644 index 0000000..4b6c453 --- /dev/null +++ b/front/src/api/index.tsx @@ -0,0 +1 @@ +export * from './floris'; diff --git a/front/src/components/pages/home-page/component.tsx b/front/src/components/pages/home-page/component.tsx index 351f970..ca2285c 100644 --- a/front/src/components/pages/home-page/component.tsx +++ b/front/src/components/pages/home-page/component.tsx @@ -1,13 +1,31 @@ +import { Heading } from '@components/ui'; import { WindmillForm } from '@components/ux'; -import React from 'react'; +import { WindmillFormResponse } from '@components/ux/windmill-form'; +import React, { useState } from 'react'; import styles from './styles.module.scss'; export function HomePage() { + const [formResponse, setFormResponse] = useState({ + power: [], + image: '', + }); + + const handleFormResponse = (response: WindmillFormResponse) => { + setFormResponse(response); + }; + return ( -
-
- +
+
+ +
+
+ Result +
{formResponse.power.join(' ')}
+
+ {formResponse.image && Image} +
); diff --git a/front/src/components/pages/home-page/styles.module.scss b/front/src/components/pages/home-page/styles.module.scss index 00762eb..c19ed2c 100644 --- a/front/src/components/pages/home-page/styles.module.scss +++ b/front/src/components/pages/home-page/styles.module.scss @@ -1,11 +1,41 @@ -.about { +.page { display: grid; padding: 20px; + gap: 20px; grid-template: - '. form .' auto - / auto minmax(0, 380px) auto; + '. form result .' auto + / auto minmax(0, 380px) minmax(0, 700px) auto; } -.form { +.wrapperForm { grid-area: form; } + +.result { + display: grid; + padding: 20px; + border-radius: 10px; + background-color: var(--clr-layer-200); + box-shadow: 0px 1px 2px var(--clr-shadow-100); + gap: 20px; + grid-area: result; + grid-template-columns: 1fr; +} + +.image { + width: 100%; + + img { + max-width: 100%; + border-radius: 10px; + } +} + +@media (width <= 1000px) { + .page { + grid-template: + 'form' auto + 'result' auto + / 1fr; + } +} diff --git a/front/src/components/ux/windmill-form/component.tsx b/front/src/components/ux/windmill-form/component.tsx index 7811609..f5ebbd8 100644 --- a/front/src/components/ux/windmill-form/component.tsx +++ b/front/src/components/ux/windmill-form/component.tsx @@ -2,20 +2,28 @@ import { Button, DateInput, Heading } from '@components/ui'; import { Controller, useForm } from '@utils/form'; import clsx from 'clsx'; import React from 'react'; +import { downloadImage, getWindmillData } from 'src/api'; import { WindmillTable } from '../windmill-table'; import { initialValues } from './constants'; import styles from './styles.module.scss'; import { WindmillFormProps, WindmillFormStore } from './types'; -export function WindmillForm({ className, ...props }: WindmillFormProps) { - const { control, reset } = useForm({ +export function WindmillForm({ + onResponse, + className, + ...props +}: WindmillFormProps) { + const { control, reset, getValues } = useForm({ initialValues, }); const classNames = clsx(className, styles.form); - const handleSubmit = (event: React.FormEvent) => { + const handleSubmit = async (event: React.FormEvent) => { event.preventDefault(); + const res = await getWindmillData(getValues()); + const image = await downloadImage(res.file_name); + onResponse({ power: res.data, image: URL.createObjectURL(image) }); }; const handleResetButtonClick = () => { diff --git a/front/src/components/ux/windmill-form/index.tsx b/front/src/components/ux/windmill-form/index.tsx index 379bd89..79e9e87 100644 --- a/front/src/components/ux/windmill-form/index.tsx +++ b/front/src/components/ux/windmill-form/index.tsx @@ -1,2 +1,6 @@ export { WindmillForm } from './component'; -export { type WindmillConfig } from './types'; +export { + type WindmillConfig, + type WindmillFormResponse, + type WindmillFormStore, +} from './types'; diff --git a/front/src/components/ux/windmill-form/types.ts b/front/src/components/ux/windmill-form/types.ts index 32d442b..eac420e 100644 --- a/front/src/components/ux/windmill-form/types.ts +++ b/front/src/components/ux/windmill-form/types.ts @@ -10,4 +10,11 @@ export type WindmillFormStore = { windmills: WindmillConfig[]; }; -export type WindmillFormProps = {} & React.ComponentProps<'form'>; +export type WindmillFormResponse = { + power: number[]; + image: string; +}; + +export type WindmillFormProps = { + onResponse: (response: WindmillFormResponse) => void; +} & React.ComponentProps<'form'>; diff --git a/front/src/components/ux/windmill-table/component.tsx b/front/src/components/ux/windmill-table/component.tsx index 24c62fd..73dd7fb 100644 --- a/front/src/components/ux/windmill-table/component.tsx +++ b/front/src/components/ux/windmill-table/component.tsx @@ -31,7 +31,7 @@ export function WindmillTable({ value, onChange }: WindmillTableProps) { }; return ( -
+
x diff --git a/front/src/components/ux/windmill-table/styles.module.scss b/front/src/components/ux/windmill-table/styles.module.scss index 1a8357d..e5d86de 100644 --- a/front/src/components/ux/windmill-table/styles.module.scss +++ b/front/src/components/ux/windmill-table/styles.module.scss @@ -1,3 +1,9 @@ +.table { + border-radius: 10px; + background-color: var(--clr-layer-200); + box-shadow: 0px 2px 2px var(--clr-shadow-100); +} + .header { display: grid; grid-template-columns: 46px 1fr 1fr 1fr; diff --git a/server/public/floris/10d49437-7cfe-4916-be63-185414713dbc.png b/server/public/floris/10d49437-7cfe-4916-be63-185414713dbc.png new file mode 100644 index 0000000..2849293 Binary files /dev/null and b/server/public/floris/10d49437-7cfe-4916-be63-185414713dbc.png differ diff --git a/server/public/floris/11c6c379-5bbc-4b69-b9da-dc8ddfaa9fe0.png b/server/public/floris/11c6c379-5bbc-4b69-b9da-dc8ddfaa9fe0.png new file mode 100644 index 0000000..6e2447e Binary files /dev/null and b/server/public/floris/11c6c379-5bbc-4b69-b9da-dc8ddfaa9fe0.png differ diff --git a/server/public/floris/201e0a6d-9f88-4cc4-a0d9-8b70cb6733c9.png b/server/public/floris/201e0a6d-9f88-4cc4-a0d9-8b70cb6733c9.png new file mode 100644 index 0000000..b2927c3 Binary files /dev/null and b/server/public/floris/201e0a6d-9f88-4cc4-a0d9-8b70cb6733c9.png differ diff --git a/server/public/floris/21355189-7f85-45d4-ab9c-0318c641cb9e.png b/server/public/floris/21355189-7f85-45d4-ab9c-0318c641cb9e.png new file mode 100644 index 0000000..907678c Binary files /dev/null and b/server/public/floris/21355189-7f85-45d4-ab9c-0318c641cb9e.png differ diff --git a/server/public/floris/23eeab0b-d1c8-4878-b279-f9ab015f86d3.png b/server/public/floris/23eeab0b-d1c8-4878-b279-f9ab015f86d3.png new file mode 100644 index 0000000..d361c2d Binary files /dev/null and b/server/public/floris/23eeab0b-d1c8-4878-b279-f9ab015f86d3.png differ diff --git a/server/public/floris/3129dcf4-e51f-4506-bef7-13a25236d74d.png b/server/public/floris/3129dcf4-e51f-4506-bef7-13a25236d74d.png new file mode 100644 index 0000000..7402c5d Binary files /dev/null and b/server/public/floris/3129dcf4-e51f-4506-bef7-13a25236d74d.png differ diff --git a/server/public/floris/32e5bb87-b1c3-4702-a5ee-c3a20531cf9b.png b/server/public/floris/32e5bb87-b1c3-4702-a5ee-c3a20531cf9b.png new file mode 100644 index 0000000..1ddc252 Binary files /dev/null and b/server/public/floris/32e5bb87-b1c3-4702-a5ee-c3a20531cf9b.png differ diff --git a/server/public/floris/3853a22d-7b97-4332-b376-9f5bf5bc9a32.png b/server/public/floris/3853a22d-7b97-4332-b376-9f5bf5bc9a32.png new file mode 100644 index 0000000..7402c5d Binary files /dev/null and b/server/public/floris/3853a22d-7b97-4332-b376-9f5bf5bc9a32.png differ diff --git a/server/public/floris/46bd2173-0b7b-438f-a6ec-605dae8c747a.png b/server/public/floris/46bd2173-0b7b-438f-a6ec-605dae8c747a.png new file mode 100644 index 0000000..b3f3c66 Binary files /dev/null and b/server/public/floris/46bd2173-0b7b-438f-a6ec-605dae8c747a.png differ diff --git a/server/public/floris/4b4fca7d-3d50-4c43-a882-95dcb5097dea.png b/server/public/floris/4b4fca7d-3d50-4c43-a882-95dcb5097dea.png new file mode 100644 index 0000000..b2927c3 Binary files /dev/null and b/server/public/floris/4b4fca7d-3d50-4c43-a882-95dcb5097dea.png differ diff --git a/server/public/floris/536f2c1f-5ba2-4132-a4f8-198b3a08049f.png b/server/public/floris/536f2c1f-5ba2-4132-a4f8-198b3a08049f.png new file mode 100644 index 0000000..b3f3c66 Binary files /dev/null and b/server/public/floris/536f2c1f-5ba2-4132-a4f8-198b3a08049f.png differ diff --git a/server/public/floris/5cdff5db-da5c-4b34-aa5a-77e97970f0eb.png b/server/public/floris/5cdff5db-da5c-4b34-aa5a-77e97970f0eb.png new file mode 100644 index 0000000..b2927c3 Binary files /dev/null and b/server/public/floris/5cdff5db-da5c-4b34-aa5a-77e97970f0eb.png differ diff --git a/server/public/floris/666e5339-abdf-42a2-95d2-08624c4d2dd0.png b/server/public/floris/666e5339-abdf-42a2-95d2-08624c4d2dd0.png new file mode 100644 index 0000000..69a3700 Binary files /dev/null and b/server/public/floris/666e5339-abdf-42a2-95d2-08624c4d2dd0.png differ diff --git a/server/public/floris/6fd4366c-4a95-4000-a3c5-f3d21454cbb3.png b/server/public/floris/6fd4366c-4a95-4000-a3c5-f3d21454cbb3.png new file mode 100644 index 0000000..2849293 Binary files /dev/null and b/server/public/floris/6fd4366c-4a95-4000-a3c5-f3d21454cbb3.png differ diff --git a/server/public/floris/72730cb8-c22d-4e5f-8fab-7f11efc3722c.png b/server/public/floris/72730cb8-c22d-4e5f-8fab-7f11efc3722c.png new file mode 100644 index 0000000..9187106 Binary files /dev/null and b/server/public/floris/72730cb8-c22d-4e5f-8fab-7f11efc3722c.png differ diff --git a/server/public/floris/739023a2-c499-416c-b337-688765e9d168.png b/server/public/floris/739023a2-c499-416c-b337-688765e9d168.png new file mode 100644 index 0000000..b2265fe Binary files /dev/null and b/server/public/floris/739023a2-c499-416c-b337-688765e9d168.png differ diff --git a/server/public/floris/796471b9-458b-421b-9542-540d580417b4.png b/server/public/floris/796471b9-458b-421b-9542-540d580417b4.png new file mode 100644 index 0000000..e9f0a3d Binary files /dev/null and b/server/public/floris/796471b9-458b-421b-9542-540d580417b4.png differ diff --git a/server/public/floris/7dea2b6f-0ac6-4337-b8ca-65ea49bc6a2e.png b/server/public/floris/7dea2b6f-0ac6-4337-b8ca-65ea49bc6a2e.png new file mode 100644 index 0000000..b2927c3 Binary files /dev/null and b/server/public/floris/7dea2b6f-0ac6-4337-b8ca-65ea49bc6a2e.png differ diff --git a/server/public/floris/8892e6aa-e89a-4474-87d0-c4c612cfcb86.png b/server/public/floris/8892e6aa-e89a-4474-87d0-c4c612cfcb86.png new file mode 100644 index 0000000..e0f12c0 Binary files /dev/null and b/server/public/floris/8892e6aa-e89a-4474-87d0-c4c612cfcb86.png differ diff --git a/server/public/floris/88cac8b7-9809-4254-819e-120de581c9eb.png b/server/public/floris/88cac8b7-9809-4254-819e-120de581c9eb.png new file mode 100644 index 0000000..b2265fe Binary files /dev/null and b/server/public/floris/88cac8b7-9809-4254-819e-120de581c9eb.png differ diff --git a/server/public/floris/891aa2e6-e485-491c-bf99-ba27a685da6c.png b/server/public/floris/891aa2e6-e485-491c-bf99-ba27a685da6c.png new file mode 100644 index 0000000..488490d Binary files /dev/null and b/server/public/floris/891aa2e6-e485-491c-bf99-ba27a685da6c.png differ diff --git a/server/public/floris/8a5dbea5-95e5-4b5d-aa82-5165cf4bf748.png b/server/public/floris/8a5dbea5-95e5-4b5d-aa82-5165cf4bf748.png new file mode 100644 index 0000000..dd887fb Binary files /dev/null and b/server/public/floris/8a5dbea5-95e5-4b5d-aa82-5165cf4bf748.png differ diff --git a/server/public/floris/9130196b-589a-4f64-b08c-82c254dfc45d.png b/server/public/floris/9130196b-589a-4f64-b08c-82c254dfc45d.png new file mode 100644 index 0000000..b3f3c66 Binary files /dev/null and b/server/public/floris/9130196b-589a-4f64-b08c-82c254dfc45d.png differ diff --git a/server/public/floris/95b56284-e148-4578-aed2-5ac2516671f5.png b/server/public/floris/95b56284-e148-4578-aed2-5ac2516671f5.png new file mode 100644 index 0000000..e0f12c0 Binary files /dev/null and b/server/public/floris/95b56284-e148-4578-aed2-5ac2516671f5.png differ diff --git a/server/public/floris/9a553ecd-7dbe-4ac4-af1e-c3f240cbd0e5.png b/server/public/floris/9a553ecd-7dbe-4ac4-af1e-c3f240cbd0e5.png new file mode 100644 index 0000000..b2927c3 Binary files /dev/null and b/server/public/floris/9a553ecd-7dbe-4ac4-af1e-c3f240cbd0e5.png differ diff --git a/server/public/floris/9f0341b1-b3aa-420c-a992-488ea3089704.png b/server/public/floris/9f0341b1-b3aa-420c-a992-488ea3089704.png new file mode 100644 index 0000000..dd887fb Binary files /dev/null and b/server/public/floris/9f0341b1-b3aa-420c-a992-488ea3089704.png differ diff --git a/server/public/floris/a32bc4ae-2b8d-4385-afcb-f2d52438ecca.png b/server/public/floris/a32bc4ae-2b8d-4385-afcb-f2d52438ecca.png new file mode 100644 index 0000000..1abd96b Binary files /dev/null and b/server/public/floris/a32bc4ae-2b8d-4385-afcb-f2d52438ecca.png differ diff --git a/server/public/floris/a46a6ec8-37d1-46fa-bbcd-742095bb2dbc.png b/server/public/floris/a46a6ec8-37d1-46fa-bbcd-742095bb2dbc.png new file mode 100644 index 0000000..d9edcc1 Binary files /dev/null and b/server/public/floris/a46a6ec8-37d1-46fa-bbcd-742095bb2dbc.png differ diff --git a/server/public/floris/ac5d2be4-35f3-493b-92e7-255d26bd82a5.png b/server/public/floris/ac5d2be4-35f3-493b-92e7-255d26bd82a5.png new file mode 100644 index 0000000..e8c5acc Binary files /dev/null and b/server/public/floris/ac5d2be4-35f3-493b-92e7-255d26bd82a5.png differ diff --git a/server/public/floris/bb06d08e-fea3-4d15-b58f-9a328192c449.png b/server/public/floris/bb06d08e-fea3-4d15-b58f-9a328192c449.png new file mode 100644 index 0000000..59ad706 Binary files /dev/null and b/server/public/floris/bb06d08e-fea3-4d15-b58f-9a328192c449.png differ diff --git a/server/public/floris/d0ef5542-8044-49ec-a744-f2e367b52bba.png b/server/public/floris/d0ef5542-8044-49ec-a744-f2e367b52bba.png new file mode 100644 index 0000000..8a79c33 Binary files /dev/null and b/server/public/floris/d0ef5542-8044-49ec-a744-f2e367b52bba.png differ diff --git a/server/public/floris/d9b256a1-468c-434b-a9f9-e92c1019f360.png b/server/public/floris/d9b256a1-468c-434b-a9f9-e92c1019f360.png new file mode 100644 index 0000000..b2927c3 Binary files /dev/null and b/server/public/floris/d9b256a1-468c-434b-a9f9-e92c1019f360.png differ diff --git a/server/public/floris/d9e2a707-c2d7-4eaa-a733-66444bd1e5a0.png b/server/public/floris/d9e2a707-c2d7-4eaa-a733-66444bd1e5a0.png new file mode 100644 index 0000000..e8c5acc Binary files /dev/null and b/server/public/floris/d9e2a707-c2d7-4eaa-a733-66444bd1e5a0.png differ diff --git a/server/public/floris/dc3e8cb1-7d7c-4914-aee2-cf5d2750aa1c.png b/server/public/floris/dc3e8cb1-7d7c-4914-aee2-cf5d2750aa1c.png new file mode 100644 index 0000000..b2265fe Binary files /dev/null and b/server/public/floris/dc3e8cb1-7d7c-4914-aee2-cf5d2750aa1c.png differ diff --git a/server/public/floris/e094937c-5b79-4fa8-b0ad-1d39c11eb419.png b/server/public/floris/e094937c-5b79-4fa8-b0ad-1d39c11eb419.png new file mode 100644 index 0000000..1ddc252 Binary files /dev/null and b/server/public/floris/e094937c-5b79-4fa8-b0ad-1d39c11eb419.png differ diff --git a/server/public/floris/e544e81f-989f-44e4-a3a4-d58cc8824ccb.png b/server/public/floris/e544e81f-989f-44e4-a3a4-d58cc8824ccb.png new file mode 100644 index 0000000..dd887fb Binary files /dev/null and b/server/public/floris/e544e81f-989f-44e4-a3a4-d58cc8824ccb.png differ diff --git a/server/public/floris/ebdc4e43-53a6-4ec1-a7d7-d9dae8e06397.png b/server/public/floris/ebdc4e43-53a6-4ec1-a7d7-d9dae8e06397.png new file mode 100644 index 0000000..a7245a1 Binary files /dev/null and b/server/public/floris/ebdc4e43-53a6-4ec1-a7d7-d9dae8e06397.png differ diff --git a/server/public/floris/f66ca7d5-3983-4220-aac9-94fd4ca689dd.png b/server/public/floris/f66ca7d5-3983-4220-aac9-94fd4ca689dd.png new file mode 100644 index 0000000..1ddc252 Binary files /dev/null and b/server/public/floris/f66ca7d5-3983-4220-aac9-94fd4ca689dd.png differ diff --git a/server/public/floris/fb81bda6-a28b-475a-8e29-154da40e12d6.png b/server/public/floris/fb81bda6-a28b-475a-8e29-154da40e12d6.png new file mode 100644 index 0000000..b84254d Binary files /dev/null and b/server/public/floris/fb81bda6-a28b-475a-8e29-154da40e12d6.png differ diff --git a/server/src/.cache.sqlite b/server/src/.cache.sqlite new file mode 100644 index 0000000..3ba360a Binary files /dev/null and b/server/src/.cache.sqlite differ diff --git a/server/src/main.py b/server/src/main.py index a4a7788..78939e1 100644 --- a/server/src/main.py +++ b/server/src/main.py @@ -9,10 +9,24 @@ from fastapi.staticfiles import StaticFiles from routers.floris_router import router as floris_router from routers.floris_template_router import router as floris_template_router from routers.weather_router import router as weather_router +from fastapi.middleware.cors import CORSMiddleware app = FastAPI() +origins = [ + "http://localhost:5000", + "*" +] + +app.add_middleware( + CORSMiddleware, + allow_origins=origins, + allow_credentials=True, + allow_methods=["*"], + allow_headers=["*"], +) + app.mount("/static", StaticFiles(directory=Path("../static")), name="static") app.mount("/public", StaticFiles(directory=Path("../public")), name="public")