From 17041efaaed7101405ed1bc4e513677cccd55891 Mon Sep 17 00:00:00 2001 From: Brian Cao Date: Mon, 31 Oct 2022 23:42:37 -0700 Subject: [PATCH] use uuid --- README.md | 5 +- components/forms/ChangePasswordForm.js | 2 +- components/forms/TrackingCodeForm.js | 2 +- .../{AccountEditForm.js => UserEditForm.js} | 4 +- components/forms/WebsiteEditForm.js | 14 +- components/metrics/RealtimeHeader.js | 4 +- components/pages/DashboardEdit.js | 12 +- components/pages/RealtimeDashboard.js | 16 +- components/pages/Settings.js | 8 +- components/pages/TestConsole.js | 12 +- components/pages/WebsiteList.js | 8 +- .../{AccountSettings.js => UserSettings.js} | 54 ++--- ...ngs.module.css => UserSettings.module.css} | 0 components/settings/WebsiteSettings.js | 30 +-- .../migrations/01_init/migration.sql | 132 ---------- .../02_add_event_data/migration.sql | 66 ----- .../03_remove_casade_delete/migration.sql | 35 --- .../migrations/04_add_uuid/migration.sql | 38 --- db/postgresql/migrations/migration_lock.toml | 3 - db/postgresql/schema.prisma | 226 +++++++++++++----- interface/auth.d.ts | 5 + interface/base.d.ts | 22 ++ interface/index.d.ts | 22 ++ lib/auth.js | 8 +- lib/constants.js | 2 +- lib/redis.js | 31 +-- lib/session.js | 44 ++-- next-env.d.ts | 5 + pages/api/auth/login.js | 11 +- pages/api/collect.js | 12 +- pages/api/realtime/init.js | 2 +- pages/api/share/[id].js | 8 +- pages/api/{accounts => users}/[id]/index.js | 20 +- .../api/{accounts => users}/[id]/password.js | 10 +- pages/api/{accounts => users}/index.js | 18 +- pages/api/websites/[id]/index.js | 26 +- pages/api/websites/[id]/metrics.js | 2 +- pages/api/websites/index.js | 21 +- pages/settings/{accounts.js => users.js} | 0 queries/admin/account/createAccount.js | 7 - queries/admin/account/getAccount.js | 7 - queries/admin/account/updateAccount.js | 8 - queries/admin/user/createUser.js | 7 + .../deleteAccount.js => user/deleteUser.js} | 13 +- queries/admin/user/getUser.js | 7 + .../getAccounts.js => user/getUsers.js} | 6 +- queries/admin/user/updateUser.js | 8 + queries/admin/website/createWebsite.js | 4 +- queries/admin/website/deleteWebsite.js | 14 +- queries/admin/website/getAllWebsites.js | 4 +- queries/admin/website/getWebsite.js | 2 +- queries/admin/website/resetWebsite.js | 10 +- queries/analytics/event/getEventData.js | 2 +- queries/analytics/event/getEventMetrics.js | 2 +- queries/analytics/event/getEvents.js | 2 +- queries/analytics/event/saveEvent.js | 9 +- .../analytics/pageview/getPageviewMetrics.js | 2 +- .../analytics/pageview/getPageviewParams.js | 2 +- .../analytics/pageview/getPageviewStats.js | 2 +- queries/analytics/pageview/getPageviews.js | 2 +- queries/analytics/pageview/savePageView.js | 12 +- queries/analytics/session/createSession.js | 9 +- .../{getSessionByUuid.js => getSession.js} | 10 +- .../analytics/session/getSessionMetrics.js | 2 +- queries/analytics/session/getSessions.js | 2 +- queries/analytics/stats/getActiveVisitors.js | 2 +- queries/analytics/stats/getWebsiteStats.js | 2 +- queries/index.js | 12 +- scripts/change-password.js | 10 +- scripts/check-db.js | 2 +- sql/schema.mysql.sql | 102 -------- sql/schema.postgresql.sql | 132 ---------- tracker/index.js | 8 +- 73 files changed, 491 insertions(+), 874 deletions(-) rename components/forms/{AccountEditForm.js => UserEditForm.js} (93%) rename components/settings/{AccountSettings.js => UserSettings.js} (68%) rename components/settings/{AccountSettings.module.css => UserSettings.module.css} (100%) delete mode 100644 db/postgresql/migrations/01_init/migration.sql delete mode 100644 db/postgresql/migrations/02_add_event_data/migration.sql delete mode 100644 db/postgresql/migrations/03_remove_casade_delete/migration.sql delete mode 100644 db/postgresql/migrations/04_add_uuid/migration.sql delete mode 100644 db/postgresql/migrations/migration_lock.toml create mode 100644 interface/auth.d.ts create mode 100644 interface/base.d.ts create mode 100644 interface/index.d.ts create mode 100644 next-env.d.ts rename pages/api/{accounts => users}/[id]/index.js (65%) rename pages/api/{accounts => users}/[id]/password.js (70%) rename pages/api/{accounts => users}/index.js (56%) rename pages/settings/{accounts.js => users.js} (100%) delete mode 100644 queries/admin/account/createAccount.js delete mode 100644 queries/admin/account/getAccount.js delete mode 100644 queries/admin/account/updateAccount.js create mode 100644 queries/admin/user/createUser.js rename queries/admin/{account/deleteAccount.js => user/deleteUser.js} (73%) create mode 100644 queries/admin/user/getUser.js rename queries/admin/{account/getAccounts.js => user/getUsers.js} (64%) create mode 100644 queries/admin/user/updateUser.js rename queries/analytics/session/{getSessionByUuid.js => getSession.js} (83%) delete mode 100644 sql/schema.mysql.sql delete mode 100644 sql/schema.postgresql.sql diff --git a/README.md b/README.md index 5fe9dd96..70576b8c 100644 --- a/README.md +++ b/README.md @@ -36,6 +36,7 @@ DATABASE_URL=connection-url ``` The connection url is in the following format: + ``` postgresql://username:mypassword@localhost:5432/mydb @@ -48,7 +49,7 @@ mysql://username:mypassword@localhost:3306/mydb yarn build ``` -The build step will also create tables in your database if you ae installing for the first time. It will also create a login account with username **admin** and password **umami**. +The build step will also create tables in your database if you ae installing for the first time. It will also create a login user with username **admin** and password **umami**. ### Start the application @@ -69,11 +70,13 @@ docker compose up ``` Alternatively, to pull just the Umami Docker image with PostgreSQL support: + ```bash docker pull docker.umami.is/umami-software/umami:postgresql-latest ``` Or with MySQL support: + ```bash docker pull docker.umami.is/umami-software/umami:mysql-latest ``` diff --git a/components/forms/ChangePasswordForm.js b/components/forms/ChangePasswordForm.js index dcad6f17..8942ecf6 100644 --- a/components/forms/ChangePasswordForm.js +++ b/components/forms/ChangePasswordForm.js @@ -43,7 +43,7 @@ export default function ChangePasswordForm({ values, onSave, onClose }) { const { user } = useUser(); const handleSubmit = async values => { - const { ok, error } = await post(`/accounts/${user.accountUuid}/password`, values); + const { ok, error } = await post(`/users/${user.id}/password`, values); if (ok) { onSave(); diff --git a/components/forms/TrackingCodeForm.js b/components/forms/TrackingCodeForm.js index 52df3bde..5a098b8d 100644 --- a/components/forms/TrackingCodeForm.js +++ b/components/forms/TrackingCodeForm.js @@ -26,7 +26,7 @@ export default function TrackingCodeForm({ values, onClose }) { rows={3} cols={60} spellCheck={false} - defaultValue={``} readOnly diff --git a/components/forms/AccountEditForm.js b/components/forms/UserEditForm.js similarity index 93% rename from components/forms/AccountEditForm.js rename to components/forms/UserEditForm.js index 70125656..0d7e392f 100644 --- a/components/forms/AccountEditForm.js +++ b/components/forms/UserEditForm.js @@ -28,13 +28,13 @@ const validate = ({ id, username, password }) => { return errors; }; -export default function AccountEditForm({ values, onSave, onClose }) { +export default function UserEditForm({ values, onSave, onClose }) { const { post } = useApi(); const [message, setMessage] = useState(); const handleSubmit = async values => { const { id } = values; - const { ok, data } = await post(id ? `/accounts/${id}` : '/accounts', values); + const { ok, data } = await post(id ? `/users/${id}` : '/users', values); if (ok) { onSave(); diff --git a/components/forms/WebsiteEditForm.js b/components/forms/WebsiteEditForm.js index f13d0aa0..491a8bfe 100644 --- a/components/forms/WebsiteEditForm.js +++ b/components/forms/WebsiteEditForm.js @@ -37,7 +37,7 @@ const validate = ({ name, domain }) => { return errors; }; -const OwnerDropDown = ({ user, accounts }) => { +const OwnerDropDown = ({ user, users }) => { const { setFieldValue, values } = useFormikContext(); useEffect(() => { @@ -46,7 +46,7 @@ const OwnerDropDown = ({ user, accounts }) => { } else if (user?.id && values.owner === '') { setFieldValue('owner', user.id.toString()); } - }, [accounts, setFieldValue, user, values]); + }, [users, setFieldValue, user, values]); if (user?.isAdmin) { return ( @@ -56,7 +56,7 @@ const OwnerDropDown = ({ user, accounts }) => {
- {accounts?.map(acc => ( + {users?.map(acc => ( @@ -73,14 +73,14 @@ const OwnerDropDown = ({ user, accounts }) => { export default function WebsiteEditForm({ values, onSave, onClose }) { const { post } = useApi(); - const { data: accounts } = useFetch(`/accounts`); + const { data: users } = useFetch(`/users`); const { user } = useUser(); const [message, setMessage] = useState(); const handleSubmit = async values => { - const { websiteUuid: websiteId } = values; + const { id } = values; - const { ok, data } = await post(websiteId ? `/websites/${websiteId}` : '/websites', values); + const { ok, data } = await post(id ? `/websites/${id}` : '/websites', values); if (ok) { onSave(); @@ -125,7 +125,7 @@ export default function WebsiteEditForm({ values, onSave, onClose }) {
- +