diff --git a/docker/docker-compose_influxdb.yml b/docker/docker-compose_influxdb.yml
new file mode 100644
index 0000000..6a99548
--- /dev/null
+++ b/docker/docker-compose_influxdb.yml
@@ -0,0 +1,16 @@
+version: '3.8'
+services:
+ influxdb:
+ image: influxdb:2.7
+ container_name: influxdb
+ environment:
+ DOCKER_INFLUXDB_INIT_MODE: setup
+ DOCKER_INFLUXDB_INIT_USERNAME: tjwater
+ DOCKER_INFLUXDB_INIT_PASSWORD: Tjwater@123456
+ DOCKER_INFLUXDB_INIT_ORG: TJWATERORG
+ DOCKER_INFLUXDB_INIT_BUCKET: TJWATERBUCKET
+ DOCKER_INFLUXDB_INIT_ADMIN_TOKEN: kMPX2V5HsbzPpUT2B9HPBu1sTG1Emf-lPlT2UjxYnGAuocpXq_f_0lK4HHs-TbbKyjsZpICkMsyXG_V2D7P7yQ==
+ ports:
+ - "8086:8086"
+ volumes:
+ - C:\Users\admin\Documents\docker\influxdb\data:/var/lib/influxdb2
diff --git a/keycloak/docker-compose.yml b/docker/docker-compose_keycloak.yml
similarity index 100%
rename from keycloak/docker-compose.yml
rename to docker/docker-compose_keycloak.yml
diff --git a/mapservice/docker-compose.yml b/docker/docker-compose_mapservice.yml
similarity index 100%
rename from mapservice/docker-compose.yml
rename to docker/docker-compose_mapservice.yml
diff --git a/keycloak/.vscode/tasks.json b/keycloak/.vscode/tasks.json
deleted file mode 100644
index 0c87756..0000000
--- a/keycloak/.vscode/tasks.json
+++ /dev/null
@@ -1,26 +0,0 @@
-{
- "version": "2.0.0",
- "tasks": [
- {
- "label": "Docker Compose Up",
- "type": "shell",
- "command": "docker compose --project-name keycloak -f docker-compose.yml up -d --build",
- "group": "build",
- "problemMatcher": []
- },
- {
- "label": "Docker Compose Down",
- "type": "shell",
- "command": "docker compose --project-name keycloak -f docker-compose.yml down",
- "group": "build",
- "problemMatcher": []
- },
- {
- "label": "Docker Compose Restart",
- "type": "shell",
- "command": "docker compose --project-name keycloak -f docker-compose.yml restart",
- "group": "build",
- "problemMatcher": []
- }
- ]
-}
diff --git a/mapservice/.vscode/tasks.json b/mapservice/.vscode/tasks.json
deleted file mode 100644
index 2919fd4..0000000
--- a/mapservice/.vscode/tasks.json
+++ /dev/null
@@ -1,26 +0,0 @@
-{
- "version": "2.0.0",
- "tasks": [
- {
- "label": "Docker Compose Up",
- "type": "shell",
- "command": "docker compose --project-name mapservice -f docker-compose.yml up -d --build",
- "group": "build",
- "problemMatcher": []
- },
- {
- "label": "Docker Compose Down",
- "type": "shell",
- "command": "docker compose --project-name mapservice -f docker-compose.yml down",
- "group": "build",
- "problemMatcher": []
- },
- {
- "label": "Docker Compose Restart",
- "type": "shell",
- "command": "docker compose --project-name mapservice -f docker-compose.yml restart",
- "group": "build",
- "problemMatcher": []
- }
- ]
-}
diff --git a/src/app/(main)/blog-posts/create/page.tsx b/src/app/(main)/blog-posts/create/page.tsx
deleted file mode 100644
index 107f722..0000000
--- a/src/app/(main)/blog-posts/create/page.tsx
+++ /dev/null
@@ -1,122 +0,0 @@
-"use client";
-
-import { Autocomplete, Box, MenuItem, Select, TextField } from "@mui/material";
-import { Create, useAutocomplete } from "@refinedev/mui";
-import { useForm } from "@refinedev/react-hook-form";
-import { Controller } from "react-hook-form";
-
-export default function BlogPostCreate() {
- const {
- saveButtonProps,
- refineCore: { formLoading, onFinish },
- handleSubmit,
- register,
- control,
- formState: { errors },
- } = useForm({});
-
- const { autocompleteProps: categoryAutocompleteProps } = useAutocomplete({
- resource: "categories",
- });
-
- return (
-
-
-
-
- (
- {
- field.onChange(value.id);
- }}
- getOptionLabel={(item) => {
- return (
- categoryAutocompleteProps?.options?.find((p) => {
- const itemId =
- typeof item === "object"
- ? item?.id?.toString()
- : item?.toString();
- const pId = p?.id?.toString();
- return itemId === pId;
- })?.title ?? ""
- );
- }}
- isOptionEqualToValue={(option, value) => {
- const optionId = option?.id?.toString();
- const valueId =
- typeof value === "object"
- ? value?.id?.toString()
- : value?.toString();
- return value === undefined || optionId === valueId;
- }}
- renderInput={(params) => (
-
- )}
- />
- )}
- />
- {
- return (
-
- );
- }}
- />
-
-
- );
-}
diff --git a/src/app/(main)/blog-posts/edit/[id]/page.tsx b/src/app/(main)/blog-posts/edit/[id]/page.tsx
deleted file mode 100644
index aa79207..0000000
--- a/src/app/(main)/blog-posts/edit/[id]/page.tsx
+++ /dev/null
@@ -1,127 +0,0 @@
-"use client";
-
-import { Autocomplete, Box, Select, TextField } from "@mui/material";
-import MenuItem from "@mui/material/MenuItem";
-import { Edit, useAutocomplete } from "@refinedev/mui";
-import { useForm } from "@refinedev/react-hook-form";
-import { Controller } from "react-hook-form";
-
-export default function BlogPostEdit() {
- const {
- saveButtonProps,
- refineCore: { query, formLoading, onFinish },
- handleSubmit,
- register,
- control,
- formState: { errors },
- } = useForm({});
-
- const blogPostsData = query?.data?.data;
-
- const { autocompleteProps: categoryAutocompleteProps } = useAutocomplete({
- resource: "categories",
- defaultValue: blogPostsData?.category?.id,
- });
-
- return (
-
-
-
- (
- {
- field.onChange(value.id);
- }}
- getOptionLabel={(item) => {
- return (
- categoryAutocompleteProps?.options?.find((p) => {
- const itemId =
- typeof item === "object"
- ? item?.id?.toString()
- : item?.toString();
- const pId = p?.id?.toString();
- return itemId === pId;
- })?.title ?? ""
- );
- }}
- isOptionEqualToValue={(option, value) => {
- const optionId = option?.id?.toString();
- const valueId =
- typeof value === "object"
- ? value?.id?.toString()
- : value?.toString();
- return value === undefined || optionId === valueId;
- }}
- renderInput={(params) => (
-
- )}
- />
- )}
- />
- {
- return (
-
- );
- }}
- />
-
-
-
- );
-}
diff --git a/src/app/(main)/blog-posts/layout.tsx b/src/app/(main)/blog-posts/layout.tsx
deleted file mode 100644
index 4fa30f6..0000000
--- a/src/app/(main)/blog-posts/layout.tsx
+++ /dev/null
@@ -1,23 +0,0 @@
-import authOptions from "@app/api/auth/[...nextauth]/options";
-import { Header } from "@components/header";
-import { ThemedLayout } from "@refinedev/mui";
-import { getServerSession } from "next-auth/next";
-import { redirect } from "next/navigation";
-import React from "react";
-
-export default async function Layout({ children }: React.PropsWithChildren) {
- const data = await getData();
-
- if (!data.session?.user) {
- return redirect("/login");
- }
-
- return {children};
-}
-
-async function getData() {
- const session = await getServerSession(authOptions);
- return {
- session,
- };
-}
diff --git a/src/app/(main)/blog-posts/page.tsx b/src/app/(main)/blog-posts/page.tsx
deleted file mode 100644
index 0ba64c9..0000000
--- a/src/app/(main)/blog-posts/page.tsx
+++ /dev/null
@@ -1,130 +0,0 @@
-"use client";
-
-import { Typography } from "@mui/material";
-import { DataGrid, type GridColDef } from "@mui/x-data-grid";
-import { useMany } from "@refinedev/core";
-import {
- DateField,
- DeleteButton,
- EditButton,
- List,
- ShowButton,
- useDataGrid,
-} from "@refinedev/mui";
-import React from "react";
-
-export default function BlogPostList() {
- const { result, dataGridProps } = useDataGrid({
- syncWithLocation: true,
- });
-
- const {
- result: { data: categories },
- query: { isLoading: categoryIsLoading },
- } = useMany({
- resource: "categories",
- ids:
- result?.data?.map((item: any) => item?.category?.id).filter(Boolean) ??
- [],
- queryOptions: {
- enabled: !!result?.data,
- },
- });
-
- const columns = React.useMemo(
- () => [
- {
- field: "id",
- headerName: "ID",
- type: "number",
- minWidth: 50,
- display: "flex",
- align: "left",
- headerAlign: "left",
- },
- {
- field: "title",
- headerName: "Title",
- minWidth: 200,
- display: "flex",
- },
- {
- field: "content",
- flex: 1,
- headerName: "Content",
- minWidth: 250,
- display: "flex",
- renderCell: function render({ value }) {
- if (!value) return "-";
- return (
-
- {value}
-
- );
- },
- },
- {
- field: "category",
- headerName: "Category",
- minWidth: 160,
- display: "flex",
- valueGetter: (_, row) => {
- const value = row?.category;
- return value;
- },
- renderCell: function render({ value }) {
- return categoryIsLoading ? (
- <>Loading...>
- ) : (
- categories?.find((item) => item.id === value?.id)?.title
- );
- },
- },
- {
- field: "status",
- headerName: "Status",
- minWidth: 80,
- display: "flex",
- },
- {
- field: "createdAt",
- headerName: "Created at",
- minWidth: 120,
- display: "flex",
- renderCell: function render({ value }) {
- return ;
- },
- },
- {
- field: "actions",
- headerName: "Actions",
- align: "right",
- headerAlign: "right",
- minWidth: 120,
- sortable: false,
- display: "flex",
- renderCell: function render({ row }) {
- return (
- <>
-
-
-
- >
- );
- },
- },
- ],
- [categories, categoryIsLoading]
- );
-
- return (
-
-
-
- );
-}
diff --git a/src/app/(main)/blog-posts/show/[id]/page.tsx b/src/app/(main)/blog-posts/show/[id]/page.tsx
deleted file mode 100644
index 6eb3f15..0000000
--- a/src/app/(main)/blog-posts/show/[id]/page.tsx
+++ /dev/null
@@ -1,62 +0,0 @@
-"use client";
-
-import { Stack, Typography } from "@mui/material";
-import { useOne, useShow } from "@refinedev/core";
-import {
- DateField,
- MarkdownField,
- Show,
- TextFieldComponent as TextField,
-} from "@refinedev/mui";
-
-export default function BlogPostShow() {
- const { result: record, query } = useShow({});
-
- const { isLoading } = query;
-
- const {
- result: category,
- query: { isLoading: categoryIsLoading },
- } = useOne({
- resource: "categories",
- id: record?.category?.id || "",
- queryOptions: {
- enabled: !!record,
- },
- });
-
- return (
-
-
-
- {"ID"}
-
-
-
-
- {"Title"}
-
-
-
-
- {"Content"}
-
-
-
-
- {"Category"}
-
- {categoryIsLoading ? <>Loading...> : <>{category?.title}>}
-
- {"Status"}
-
-
-
-
- {"CreatedAt"}
-
-
-
-
- );
-}
diff --git a/src/app/(main)/categories/create/page.tsx b/src/app/(main)/categories/create/page.tsx
deleted file mode 100644
index a09fddb..0000000
--- a/src/app/(main)/categories/create/page.tsx
+++ /dev/null
@@ -1,38 +0,0 @@
-"use client";
-
-import { Box, TextField } from "@mui/material";
-import { Create } from "@refinedev/mui";
-import { useForm } from "@refinedev/react-hook-form";
-
-export default function CategoryCreate() {
- const {
- saveButtonProps,
- refineCore: { formLoading },
- register,
- formState: { errors },
- } = useForm({});
-
- return (
-
-
-
-
-
- );
-}
diff --git a/src/app/(main)/categories/edit/[id]/page.tsx b/src/app/(main)/categories/edit/[id]/page.tsx
deleted file mode 100644
index 2a24b26..0000000
--- a/src/app/(main)/categories/edit/[id]/page.tsx
+++ /dev/null
@@ -1,37 +0,0 @@
-"use client";
-
-import { Box, TextField } from "@mui/material";
-import { Edit } from "@refinedev/mui";
-import { useForm } from "@refinedev/react-hook-form";
-
-export default function CategoryEdit() {
- const {
- saveButtonProps,
- register,
- formState: { errors },
- } = useForm({});
-
- return (
-
-
-
-
-
- );
-}
diff --git a/src/app/(main)/categories/layout.tsx b/src/app/(main)/categories/layout.tsx
deleted file mode 100644
index 4fa30f6..0000000
--- a/src/app/(main)/categories/layout.tsx
+++ /dev/null
@@ -1,23 +0,0 @@
-import authOptions from "@app/api/auth/[...nextauth]/options";
-import { Header } from "@components/header";
-import { ThemedLayout } from "@refinedev/mui";
-import { getServerSession } from "next-auth/next";
-import { redirect } from "next/navigation";
-import React from "react";
-
-export default async function Layout({ children }: React.PropsWithChildren) {
- const data = await getData();
-
- if (!data.session?.user) {
- return redirect("/login");
- }
-
- return {children};
-}
-
-async function getData() {
- const session = await getServerSession(authOptions);
- return {
- session,
- };
-}
diff --git a/src/app/(main)/categories/page.tsx b/src/app/(main)/categories/page.tsx
deleted file mode 100644
index d78cf09..0000000
--- a/src/app/(main)/categories/page.tsx
+++ /dev/null
@@ -1,61 +0,0 @@
-"use client";
-
-import { DataGrid, type GridColDef } from "@mui/x-data-grid";
-import {
- DeleteButton,
- EditButton,
- List,
- ShowButton,
- useDataGrid,
-} from "@refinedev/mui";
-import React from "react";
-
-export default function CategoryList() {
- const { dataGridProps } = useDataGrid({});
-
- const columns = React.useMemo(
- () => [
- {
- field: "id",
- headerName: "ID",
- type: "number",
- minWidth: 50,
- display: "flex",
- align: "left",
- headerAlign: "left",
- },
- {
- field: "title",
- flex: 1,
- headerName: "Title",
- minWidth: 200,
- display: "flex",
- },
- {
- field: "actions",
- headerName: "Actions",
- align: "right",
- headerAlign: "right",
- minWidth: 120,
- sortable: false,
- display: "flex",
- renderCell: function render({ row }) {
- return (
- <>
-
-
-
- >
- );
- },
- },
- ],
- []
- );
-
- return (
-
-
-
- );
-}
diff --git a/src/app/(main)/categories/show/[id]/page.tsx b/src/app/(main)/categories/show/[id]/page.tsx
deleted file mode 100644
index f6b96a8..0000000
--- a/src/app/(main)/categories/show/[id]/page.tsx
+++ /dev/null
@@ -1,27 +0,0 @@
-"use client";
-
-import { Stack, Typography } from "@mui/material";
-import { useShow } from "@refinedev/core";
-import { Show, TextFieldComponent as TextField } from "@refinedev/mui";
-
-export default function CategoryShow() {
- const { query } = useShow({});
- const { data, isLoading } = query;
-
- const record = data?.data;
-
- return (
-
-
-
- {"ID"}
-
-
-
- {"Title"}
-
-
-
-
- );
-}