Set up postgres
This commit is contained in:
@@ -9,7 +9,7 @@ insert_final_newline = true
|
|||||||
max_line_length = 120
|
max_line_length = 120
|
||||||
tab_width = 4
|
tab_width = 4
|
||||||
|
|
||||||
[*.{md,sh,yaml,yml}]
|
[*.{md,sh,sql,yaml,yml}]
|
||||||
max_line_length = 1024
|
max_line_length = 1024
|
||||||
indent_size = 2
|
indent_size = 2
|
||||||
tab_width = 2
|
tab_width = 2
|
||||||
|
|||||||
@@ -7,6 +7,9 @@ In twilight's hush, where mythic tales unfold, A ledger of legends, the bravest
|
|||||||
| name | required | info |
|
| name | required | info |
|
||||||
|------------------------|:--------:|-------------------------|
|
|------------------------|:--------:|-------------------------|
|
||||||
| spring.profiles.active | ✓ | Spring Boot environment |
|
| spring.profiles.active | ✓ | Spring Boot environment |
|
||||||
|
| spring.r2dbc.url | ✓ | Postgres host url |
|
||||||
|
| spring.r2dbc.username | ✓ | Postgres username |
|
||||||
|
| spring.r2dbc.password | ✗ | Postgres password |
|
||||||
|
|
||||||
*Required: ✓ can be stored as text, and ✗ need to be stored as secret.*
|
*Required: ✓ can be stored as text, and ✗ need to be stored as secret.*
|
||||||
|
|
||||||
|
|||||||
@@ -11,8 +11,12 @@ dependencies {
|
|||||||
implementation(hlaeja.kotlin.reflect)
|
implementation(hlaeja.kotlin.reflect)
|
||||||
implementation(hlaeja.kotlinx.coroutines)
|
implementation(hlaeja.kotlinx.coroutines)
|
||||||
implementation(hlaeja.springboot.starter.actuator)
|
implementation(hlaeja.springboot.starter.actuator)
|
||||||
|
implementation(hlaeja.springboot.starter.r2dbc)
|
||||||
implementation(hlaeja.springboot.starter.webflux)
|
implementation(hlaeja.springboot.starter.webflux)
|
||||||
|
|
||||||
|
runtimeOnly(hlaeja.postgresql)
|
||||||
|
runtimeOnly(hlaeja.postgresql.r2dbc)
|
||||||
|
|
||||||
testImplementation(hlaeja.assertj.core)
|
testImplementation(hlaeja.assertj.core)
|
||||||
testImplementation(hlaeja.mockk)
|
testImplementation(hlaeja.mockk)
|
||||||
testImplementation(hlaeja.projectreactor.reactor.test)
|
testImplementation(hlaeja.projectreactor.reactor.test)
|
||||||
|
|||||||
65
sql/000-initizalise.sql
Normal file
65
sql/000-initizalise.sql
Normal file
@@ -0,0 +1,65 @@
|
|||||||
|
-- Role: role_administrator
|
||||||
|
-- DROP ROLE IF EXISTS role_administrator;
|
||||||
|
|
||||||
|
CREATE ROLE role_administrator;
|
||||||
|
|
||||||
|
|
||||||
|
-- Role: role_service
|
||||||
|
-- DROP ROLE IF EXISTS role_service;
|
||||||
|
|
||||||
|
CREATE ROLE role_service;
|
||||||
|
|
||||||
|
|
||||||
|
-- Role: role_maintainer
|
||||||
|
-- DROP ROLE IF EXISTS role_maintainer;
|
||||||
|
|
||||||
|
CREATE ROLE role_maintainer;
|
||||||
|
|
||||||
|
|
||||||
|
-- Role: support_role
|
||||||
|
-- DROP ROLE IF EXISTS support_role;
|
||||||
|
|
||||||
|
CREATE ROLE role_support;
|
||||||
|
|
||||||
|
|
||||||
|
-- User: services
|
||||||
|
-- DROP USER IF EXISTS services;
|
||||||
|
|
||||||
|
CREATE USER services WITH PASSWORD 'password';
|
||||||
|
|
||||||
|
-- Assign role to the user
|
||||||
|
GRANT role_service TO services;
|
||||||
|
|
||||||
|
|
||||||
|
-- User: user_maintainer
|
||||||
|
-- DROP USER IF EXISTS user_maintainer;
|
||||||
|
|
||||||
|
CREATE USER user_maintainer WITH PASSWORD 'password';
|
||||||
|
|
||||||
|
-- Assign role to the user
|
||||||
|
GRANT role_maintainer TO user_maintainer;
|
||||||
|
|
||||||
|
|
||||||
|
-- User: user_support
|
||||||
|
-- DROP USER IF EXISTS user_support;
|
||||||
|
|
||||||
|
CREATE USER user_support WITH PASSWORD 'password';
|
||||||
|
|
||||||
|
-- Assign role to the user
|
||||||
|
GRANT role_support TO user_support;
|
||||||
|
|
||||||
|
|
||||||
|
-- Database: device_registry
|
||||||
|
-- DROP DATABASE IF EXISTS device_registry;
|
||||||
|
|
||||||
|
CREATE DATABASE account_registry
|
||||||
|
WITH
|
||||||
|
OWNER = role_administrator
|
||||||
|
ENCODING = 'UTF8'
|
||||||
|
LC_COLLATE = 'en_US.utf8'
|
||||||
|
LC_CTYPE = 'en_US.utf8'
|
||||||
|
LOCALE_PROVIDER = 'libc'
|
||||||
|
TABLESPACE = pg_default
|
||||||
|
CONNECTION LIMIT = -1
|
||||||
|
IS_TEMPLATE = False;
|
||||||
|
|
||||||
43
sql/001-uuid_v7.sql
Normal file
43
sql/001-uuid_v7.sql
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
-- FUNCTION: public.gen_uuid_v7(timestamp with time zone)
|
||||||
|
|
||||||
|
-- DROP FUNCTION IF EXISTS public.gen_uuid_v7(timestamp with time zone);
|
||||||
|
|
||||||
|
CREATE OR REPLACE FUNCTION public.gen_uuid_v7(p_timestamp timestamp with time zone)
|
||||||
|
RETURNS uuid
|
||||||
|
LANGUAGE 'sql'
|
||||||
|
COST 100
|
||||||
|
VOLATILE PARALLEL UNSAFE
|
||||||
|
AS
|
||||||
|
$BODY$
|
||||||
|
-- Replace the first 48 bits of a uuid v4 with the provided timestamp (in milliseconds) since 1970-01-01 UTC, and set the version to 7
|
||||||
|
SELECT encode(set_bit(set_bit(overlay(uuid_send(gen_random_uuid()) PLACING substring(int8send((extract(EPOCH FROM p_timestamp) * 1000):: BIGINT) FROM 3) FROM 1 FOR 6), 52, 1), 53, 1), 'hex') ::uuid;
|
||||||
|
$BODY$;
|
||||||
|
|
||||||
|
ALTER FUNCTION public.gen_uuid_v7(timestamp with time zone)
|
||||||
|
OWNER TO role_administrator;
|
||||||
|
|
||||||
|
COMMENT
|
||||||
|
ON FUNCTION public.gen_uuid_v7(timestamp with time zone)
|
||||||
|
IS 'Generate a UUIDv7 value using a provided timestamp (in milliseconds since 1970-01-01 UTC) with 74 bits of randomness.';
|
||||||
|
|
||||||
|
|
||||||
|
-- FUNCTION: public.gen_uuid_v7()
|
||||||
|
|
||||||
|
-- DROP FUNCTION IF EXISTS public.gen_uuid_v7();
|
||||||
|
|
||||||
|
CREATE OR REPLACE FUNCTION public.gen_uuid_v7()
|
||||||
|
RETURNS uuid
|
||||||
|
LANGUAGE 'sql'
|
||||||
|
COST 100
|
||||||
|
VOLATILE PARALLEL UNSAFE
|
||||||
|
AS
|
||||||
|
$BODY$
|
||||||
|
SELECT gen_uuid_v7(clock_timestamp());
|
||||||
|
$BODY$;
|
||||||
|
|
||||||
|
ALTER FUNCTION public.gen_uuid_v7()
|
||||||
|
OWNER TO role_administrator;
|
||||||
|
|
||||||
|
COMMENT
|
||||||
|
ON FUNCTION public.gen_uuid_v7()
|
||||||
|
IS 'Generate a UUIDv7 value with a 48-bit timestamp (millisecond precision) and 74 bits of randomness.';
|
||||||
@@ -18,6 +18,10 @@ spring:
|
|||||||
config:
|
config:
|
||||||
activate:
|
activate:
|
||||||
on-profile: development
|
on-profile: development
|
||||||
|
r2dbc:
|
||||||
|
url: r2dbc:postgresql://localhost:5432/account_registry
|
||||||
|
username: services
|
||||||
|
password: password
|
||||||
|
|
||||||
---
|
---
|
||||||
##########################
|
##########################
|
||||||
@@ -27,6 +31,10 @@ spring:
|
|||||||
config:
|
config:
|
||||||
activate:
|
activate:
|
||||||
on-profile: docker
|
on-profile: docker
|
||||||
|
r2dbc:
|
||||||
|
url: r2dbc:postgresql://PostgreSQL:5432/account_registry
|
||||||
|
username: services
|
||||||
|
password: password
|
||||||
|
|
||||||
---
|
---
|
||||||
##############################
|
##############################
|
||||||
|
|||||||
Reference in New Issue
Block a user