# Wille - Poa ###### tags: `wille` ## Domenski model ```plantuml PrincipalBusinessEntity "*" -up-> "0..1" NaturalPerson: representative PrincipalBusinessEntity "*" --> "1" BusinessEntity: principal LegalTransaction "*" <-- "*" PoaDocument PoaDocument "1" -up-> "0..1" Attachment: poaFile PoaDocument "1" -up-> "*" Attachment: history PoaDocument "1" -up-> "0..1" PoaCancellation: cancellationDocument PoaDocument "1" --> "*" PrincipalBusinessEntity: principals PoaDocument "*" --> "*" BusinessEntity: attorneys PoaDocument "*" --> "1" Institution: notary PoaModification "1" --> "1" Attachment: attachment PoaModification "*" --> "1" Institution: institution PoaModification "*" --> "1" PoaDocument: poaDocument PoaCancellation -up-|> PoaModification PoaConstriction -up-|> PoaModification PoaPartialCancellation -up-|> PoaModification PoaPartialCancellation "1" --> "*" PoaPartialRelation: relations PoaPartialRelation "*" --> "1" PrincipalBusinessEntity: principal PoaPartialRelation "1" --> "*" BusinessEntity: attorneys class PoaDocument << SearchableAndAuditable >> { number: string depositedDate: Date state: DepositedState poaType: PoaType status: DocumentStatus durabilityType: DurabilityType expirationDate: Date creationType: CreationType certificationType: CertificationType details: Map contexts: List<PoaDocumentContext> } abstract class PoaModification << SearchableAndAuditable >> { number: Stirng note: String poaModifyDate: DateTime } class PoaCancellation { } class PoaConstriction { } class PoaPartialCancellation { } class PoaPartialRelation << SearchableAndAuditable >>{ } class PrincipalBusinessEntity { email: String } class LegalTransaction << SearchableAndAuditable >> { uuid: string name: string requiredCertification: boolean status: LegalTransactionStatus } class DocumentPreviewAction << SearchableAndAuditable >> { ownerUuid: String institutionUuid: String actionReason: String attachmentUuid: String } class Attachment { } enum PoaState { NEW, SUBMITTED, CONFIRMED, REJECTED, CANCELLED, OUT_OF_SYSTEM } enum PoaType { INDIVIDUAL, JOINT, UNKNOWN } enum DurabilityType { DURABLE, NONDURABLE, UNKNOWN } enum CreationType { PERSONALLY_UNREGISTERED, PERSONALLY_REGISTERED, INSTITUTION, REMOTE, SYSTEM } enum CertificationType { NONE, REQUIRED, UNKNOWN } ``` ## Kreiranje patch-eva i changelog-ova 1. Potrebno je da postoji kreiran **poa** psql user ```sql= psql postgres -U postgres -c "create USER poa with PASSWORD 'poa'"; ``` 2. Kreiramo **poa_prod_schema** bazu podataka u kojoj će biti kreirana šema sa produkcije ```sql= psql postgres -U postgres -c "select pg_terminate_backend(pid) from pg_stat_activity where datname = 'poa_prod_schema'" psql postgres -U postgres -c "drop database if exists poa_prod_schema" psql postgres -U postgres -c "create database poa_prod_schema" psql postgres -U postgres -c "grant all privileges on database poa_prod_schema to poa" ``` 3. Kreiramo tabele (šemu) sa produkcije **Na poapriv**: - docker exec -it poa_db_1 /bin/bash - pg_dump -U poa -s > poa_prod_schema.sql - exit - docker cp poa_db_1:poa_prod_schema.sql poa_prod_schema.sql - exit - rsync -avc poapriv:poa_prod_schema.sql . ```sql= psql poa_prod_schema -U poa < poa_prod_schema.sql ``` 4. Kreiramo **poa_dev_schema** bazu podataka u kojoj će biti kreirana trenutna šema podataka ```sql= psql postgres -U postgres -c "select pg_terminate_backend(pid) from pg_stat_activity where datname = 'poa_dev_schema'" psql postgres -U postgres -c "drop database if exists poa_dev_schema" psql postgres -U postgres -c "create database poa_dev_schema" psql postgres -U postgres -c "grant all privileges on database poa_dev_schema to poa" ``` 5. Postavljamo prod konfiguraciju tako da kreira celokupnu šemu podataka u poa_dev_schema bazi podataka kako bi napravili **diff** trenutne i šeme sa produkcije ```java= spring.jpa.hibernate.ddl-auto = create spring.datasource.url=jdbc:postgresql://localhost:5432/poa_dev_schema spring.liquibase.enabled=false ``` **cd wille-poa mvn spring-boot:run -Dspring-boot.run.profiles=prod** 6. Krairamo diff trenutne i šeme sa produkcije u fajlu db.changelog-diff.postgresql.sql ```shell= mvn liquibase:diff \ -Dliquibase.username=poa \ -Dliquibase.url=jdbc:postgresql://localhost:5432/poa_prod_schema \ -Dliquibase.referenceUsername=poa \ -Dliquibase.referenceUrl=jdbc:postgresql://localhost:5432/poa_dev_schema \ -Dliquibase.changeLogFile=src/main/resources/db/changelog/db.changelog-master.yaml \ -Dliquibase.diffChangeLogFile=src/main/resources/db/changelog/db.changelog-diff.postgresql.sql \ -Dliquibase.logging=DEBUG \ -Dliquibase.verbose=true ``` 7. Obrisati sve act_ i jv_ changeset-ove iz db.changelog-diff.postgresql.sql 8. Napraviti patch-eve i changelog fajlove pa ih zatim ukljuciti i u changelog-master (ostaviti db.changelog-diff.postgresql.sql cistim) 9. Vratiti prod konfiguraciju u prethodno stanje 10. Kreiramo poa bazu podataka u koju će biti spušten prod poa_prod.sql dump ```sql= psql postgres -U postgres -c "select pg_terminate_backend(pid) from pg_stat_activity where datname = 'poa'" psql postgres -U postgres -c "drop database if exists poa" psql postgres -U postgres -c "create database poa" psql postgres -U postgres -c "grant all privileges on database poa to poa" ``` 11. Kreiramo tabele (šemu ukljucujuci i podatke) sa produkcije **Na poapriv:** - docker exec -it poa_db_1 /bin/bash - pg_dump -U poa > poa_prod.sql - exit - docker cp poa_db_1:poa_prod.sql poa_prod.sql - exit - rsync -avc poapriv:poa_prod.sql . ```sql= psql poa -U poa < poa_prod.sql ``` 12. Pokrenemo aplikaciju i proverimo da li se changelog-ovi kreiraju uspešno, u suprotnom ponoviti postupak dok se ne kreira željena šema **cd wille-poa mvn spring-boot:run -Dspring-boot.run.profiles=prod** ## Testni korisnici | Sud | username | password | |:------------------------- |:------------- |:---------- | | OSNOVNI SUD U PANCEVU | prituzbetest1 | Pravda2022 | | VISI SUD U PANCEVU | prituzbetest2 | Pravda2022 | | APELACIONI SUD U BEOGRADU | prituzbetest3 | Pravda2022 | | VRHOVNI KASACIONI SUD | prituzbetest4 | Pravda2022 | | MINISTARSTVO PRAVDE | prituzbetest5 | Pravda2022 | | VISOKI SAVET SUDSTVA | prituzbetest6 | Pravda2022 | ## Spisak veb notifikacija i email obaveštenja #### Zahtev za prihvatanje uloge vlastodavca | | Naslov | Opis | | ---------------- | ------------------------------------------------- |:---------------------------------------------------------------------------- | | **notifikacija** | Pristigao zahtev za prihvatanje uloge vlastodavca | Pristigao Vam je zahtev {link} za prihvatanje uloge vlastodavca na punomoćju | | **email** | | | #### Zahtev za overu punomoćja | | Naslov | Opis | | ---------------- | ----------------------------------- |:------------------------------------------------- | | **notifikacija** | Pristigao zahtev za overu punomoćja | Pristigao Vam je zahtev {link} za overu punomoćja | | **email** | | | #### Prihvaćena overa punomoćja | | Naslov | Opis | | ---------------- | -------------------------- |:--------------------------------------------------------- | | **notifikacija** | Prihvaćena overa punomoćja | Uspešno zavedeno punomoćje {link} od strane notara {link} | | **email** | | | #### Otkazano punomoćje | | Naslov | Opis | | ---------------- |:------------------ |:----------------------------------------------------- | | **notifikacija** | Otkazano punomoćje | Punomoćje {link} je otkazano. Razlog otkazivanja: ... | | **email** | | | #### Odbijeno punomoćje | | Naslov | Opis | | ---------------- |:------------------ |:-------------------------------------------------------------------- | | **notifikacija** | Odbijeno punomoćje | Punomoćje je odbijeno od strane notara {link}. Razlog odbijanja: ... | | **email** | | | #### Zavedeno punomoćje | | Naslov | Opis | | ---------------- |:------------------ |:-------------------------------------------------------------------- | | **notifikacija** | Zavedeno punomoćje | Uspešno je zavedeno punomoćje {link} | | **email** | | | ### Privilegije | Authority | Role | | ---------------------------------- | ------------------------------------------------------------------------- | | LEGAL-TRANSACTION_SAVE | MINISTRY_CLERK | | LEGAL-TRANSACTION_GET | NATURAL_PERSON, LEGAL_PERSON, LAWYER, NOTARY, NOTARY_READ, MINISTRY_CLERK | | LEGAL-TRANSACTION_UPDATE | MINISTRY_CLERK | | LEGAL-TRANSACTION_DELETE | MINISTRY_CLERK | | POA_INTERNAL_GET | NOTARY, NOTARY_READ, MINISTRY_CLERK | | POA_EXTERNAL_GET | NATURAL_PERSON, LEGAL_PERSON, LAWYER | | POA_EXTERNAL_GET_MY | NATURAL_PERSON, LEGAL_PERSON, LAWYER | | POA_INTERNAL_GET_MY | NOTARY, NOTARY_READ, MINISTRY_CLERK | | POA_HISTORY | NOTARY, NOTARY_READ, MINISTRY_CLERK | | POA_PERSONALLY_START-DEPOSITION | NATURAL_PERSON, LEGAL_PERSON | | POA_REMOTE_START-DEPOSITION | NATURAL_PERSON, LEGAL_PERSON | | POA_INSTITUTION_START-DEPOSITION | NOTARY | | POA_REMOTE_ROLE-DECIDE | NATURAL_PERSON, LEGAL_PERSON | | POA_ACCEPT | NOTARY | | POA_REJECT | NOTARY | | POA_UPDATE | NOTARY | | POA_FILE_GET | NATURAL_PERSON, LEGAL_PERSON, NOTARY, NOTARY_READ, MINISTRY_CLERK | | POA_CANCEL | NOTARY | | POA_VERIFICATION-OF-INSPECTION_GET | NOTARY, NOTARY_READ | | POA_STATISTICS_MY | NATURAL_PERSON, LEGAL_PERSON, LAWYER, NOTARY, NOTARY_READ | | POA_TASK_MY | NATURAL_PERSON, LEGAL_PERSON, LAWYER, NOTARY | | POA_CANCELLATION_FILE-GET | NATURAL_PERSON, LEGAL_PERSON, NOTARY, NOTARY_READ, MINISTRY_CLERK | | POA_CANCELLATION_FILE-REQUEST | NOTARY, NOTARY_READ | | POA_CONSTRICTION_SAVE | NOTARY | | POA_CONSTRICTION_GET | NATURAL_PERSON, LEGAL_PERSON, LAWYER, NOTARY, NOTARY_READ, MINISTRY_CLERK | | POA_CONSTRICTION_FILE-GET | NATURAL_PERSON, LEGAL_PERSON, NOTARY, NOTARY_READ, MINISTRY_CLERK | | POA_CONSTRICTION_FILE-REQUEST | NOTARY, NOTARY_READ | | POA_PARTIAL-CANCELLATION_SAVE | NOTARY | | POA_PARTIAL-CANCELLATION_GET | NATURAL_PERSON, LEGAL_PERSON, LAWYER, NOTARY, NOTARY_READ, MINISTRY_CLERK | | POA_PARTIAL-CANCELLATION_FILE-GET | NATURAL_PERSON, LEGAL_PERSON, NOTARY, NOTARY_READ, MINISTRY_CLERK | | POA_PARTIAL_CANCELLATION_FILE_REQUEST | NOTARY, NOTARY_READ |