From 37f85aefd18ee6513f0b3507aedf6178c92f00aa Mon Sep 17 00:00:00 2001 From: Fabian Urner Date: Thu, 2 May 2024 16:32:11 +0200 Subject: [PATCH] feat: add new user endpoint --- sql/insert_data.sql | 157 +++++++++--------- sql/volodb.sql | 13 +- .../java/dev/urner/volodb/entity/User.java | 30 ++-- .../urner/volodb/rest/AuthRestController.java | 18 +- .../volodb/rest/ContractErrorResponse.java | 16 -- .../urner/volodb/rest/FileRestController.java | 14 +- .../volodb/rest/ProjectErrorResponse.java | 16 -- .../volodb/rest/ProjectRestController.java | 46 +++-- .../urner/volodb/rest/UserRestController.java | 48 ++++++ ...Response.java => VolodbErrorResponse.java} | 2 +- .../volodb/rest/VolunteerErrorResponse.java | 16 -- .../volodb/rest/VolunteerRestController.java | 46 +++-- 12 files changed, 209 insertions(+), 213 deletions(-) delete mode 100644 src/main/java/dev/urner/volodb/rest/ContractErrorResponse.java delete mode 100644 src/main/java/dev/urner/volodb/rest/ProjectErrorResponse.java create mode 100644 src/main/java/dev/urner/volodb/rest/UserRestController.java rename src/main/java/dev/urner/volodb/rest/{AuthErrorResponse.java => VolodbErrorResponse.java} (87%) delete mode 100644 src/main/java/dev/urner/volodb/rest/VolunteerErrorResponse.java diff --git a/sql/insert_data.sql b/sql/insert_data.sql index 304e29d..53371a5 100644 --- a/sql/insert_data.sql +++ b/sql/insert_data.sql @@ -53,11 +53,12 @@ CREATE TABLE `contact_type` ( DROP TABLE IF EXISTS `user`; CREATE TABLE `user` ( - `username` VARCHAR(50) NOT NULL, + `email` VARCHAR(50) NOT NULL, `person` INT NOT NULL, `secret` VARCHAR(100) NOT NULL, `organisational_role` VARCHAR(50), - PRIMARY KEY (`username`) + `avatar` TEXT, + PRIMARY KEY (`email`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1; DROP TABLE IF EXISTS `user_role`; @@ -160,8 +161,8 @@ CREATE TABLE `vocational_edu` ( PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1; -DROP TABLE IF EXISTS `Contract`; -CREATE TABLE `Contract` ( +DROP TABLE IF EXISTS `contract`; +CREATE TABLE `contract` ( `id` INT NOT NULL AUTO_INCREMENT, `timestamp` DATETIME NOT NULL, `volunteer` INT NOT NULL, @@ -321,7 +322,7 @@ CREATE TABLE `volunteer_document_type` ( ALTER TABLE `user` ADD FOREIGN KEY (`person`) REFERENCES `person` (`id`); -ALTER TABLE `user_role_mapping` ADD FOREIGN KEY (`user`) REFERENCES `user` (`username`); +ALTER TABLE `user_role_mapping` ADD FOREIGN KEY (`user`) REFERENCES `user` (`email`); ALTER TABLE `user_role_mapping` ADD FOREIGN KEY (`user_role`) REFERENCES `user_role` (`id`); @@ -353,7 +354,7 @@ ALTER TABLE `volunteer` ADD FOREIGN KEY (`religion`) REFERENCES `religion` (`id` ALTER TABLE `editing_history` ADD FOREIGN KEY (`volunteer`) REFERENCES `volunteer` (`id`); -ALTER TABLE `editing_history` ADD FOREIGN KEY (`user`) REFERENCES `user` (`username`); +ALTER TABLE `editing_history` ADD FOREIGN KEY (`user`) REFERENCES `user` (`email`); ALTER TABLE `editing_history` ADD FOREIGN KEY (`editing_type`) REFERENCES `editing_type` (`id`); @@ -385,13 +386,13 @@ ALTER TABLE `contract_modification` ADD FOREIGN KEY (`status`) REFERENCES `contr ALTER TABLE `volunteer_note` ADD FOREIGN KEY (`volunteer`) REFERENCES `volunteer` (`id`); -ALTER TABLE `volunteer_note` ADD FOREIGN KEY (`user`) REFERENCES `user` (`username`); +ALTER TABLE `volunteer_note` ADD FOREIGN KEY (`user`) REFERENCES `user` (`email`); ALTER TABLE `volunteer_document` ADD FOREIGN KEY (`volunteer`) REFERENCES `volunteer` (`id`); ALTER TABLE `volunteer_document` ADD FOREIGN KEY (`type`) REFERENCES `volunteer_document_type` (`id`); -ALTER TABLE `volunteer_document` ADD FOREIGN KEY (`user`) REFERENCES `user` (`username`); +ALTER TABLE `volunteer_document` ADD FOREIGN KEY (`user`) REFERENCES `user` (`email`); /* ########################## */ /* INSERT NEW DATA */ @@ -718,11 +719,11 @@ VALUES (5, 1, 'goldsmits@donbosco.de'), (5, 1, 'mohring@manege-berlin.de'); -INSERT INTO user (person, username, secret, organisational_role) +INSERT INTO user (person, email, secret, organisational_role, avatar) VALUES - (6, 'magdalena.wiesinger', '$2a$12$bvG0ScICxF6gaF4cstczNub7PI79w/o0EIez9dlUoZe70eMP.eaL2', 'Fachreferentin für Freiwilligendienste'), - (7, 'jakob.bopp', '$2a$12$bvG0ScICxF6gaF4cstczNub7PI79w/o0EIez9dlUoZe70eMP.eaL2', 'Fachreferent für Freiwilligendienste'), - (8, 'fabian.urner', '$2a$12$bvG0ScICxF6gaF4cstczNub7PI79w/o0EIez9dlUoZe70eMP.eaL2', 'Fachreferent für Freiwilligendienste'); + (6, 'wiesinger@donbosco.de', '$2a$12$bvG0ScICxF6gaF4cstczNub7PI79w/o0EIez9dlUoZe70eMP.eaL2', 'Fachreferentin für Freiwilligendienste', 'volodb/default-files/default-avatar.png'), + (7, 'jakob.bopp@donbosco.de', '$2a$12$bvG0ScICxF6gaF4cstczNub7PI79w/o0EIez9dlUoZe70eMP.eaL2', 'Fachreferent für Freiwilligendienste', 'volodb/default-files/default-avatar.png'), + (8, 'urner@donbosco.de', '$2a$12$bvG0ScICxF6gaF4cstczNub7PI79w/o0EIez9dlUoZe70eMP.eaL2', 'Fachreferent für Freiwilligendienste', 'volodb/default-files/default-avatar.png'); INSERT INTO user_role (name) VALUES @@ -733,13 +734,13 @@ VALUES INSERT INTO user_role_mapping (user, user_role) VALUES - ('magdalena.wiesinger', 2), - ('magdalena.wiesinger', 4), - ('jakob.bopp', 2), - ('jakob.bopp', 3), - ('fabian.urner', 1), - ('fabian.urner', 2), - ('fabian.urner', 3); + ('wiesinger@donbosco.de', 2), + ('wiesinger@donbosco.de', 4), + ('jakob.bopp@donbosco.de', 2), + ('jakob.bopp@donbosco.de', 3), + ('urner@donbosco.de', 1), + ('urner@donbosco.de', 2), + ('urner@donbosco.de', 3); INSERT INTO legal_guardian (person) VALUES @@ -907,13 +908,13 @@ VALUES ('Studium (abgeschlossen)'), ('keine Angaben'); -INSERT INTO volunteer (organisational_id, person, created, status, birthday, birthplace, nationality, social_insurance_number, health_insurance, tax_number, religion, bank_name, iban, bic, account_holder, level_of_school_edu, level_of_vocational_edu, ongoing_legal_proceedings) +INSERT INTO volunteer (organisational_id, person, created, status, birthday, birthplace, nationality, social_insurance_number, health_insurance, tax_number, religion, bank_name, iban, bic, account_holder, level_of_school_edu, level_of_vocational_edu, ongoing_legal_proceedings, avatar) VALUES - ('FWDSDB2223_001', 1, '2022-02-01 09:12:45.293', 5, '2002-03-18', 'Frankfurt', 90, NULL, NULL, NULL, 24, 'Musterbank', 'DE89370400440532013000', 'COBADEFFXXX', 'Albert Huber', 4, 1, false), - ('FWDSDB2223_002', 2, '2022-03-01 09:12:45.293', 5, '2002-03-18', 'Frankfurt', 90, NULL, NULL, NULL, 1, 'Musterbank', 'DE89370400440532013000', 'COBADEFFXXX', 'Roswita Mayer', 3, 1, false), - ('FWDSDB2223_003', 3, '2022-04-01 09:12:45.293', 5, '2002-03-18', 'Frankfurt', 90, NULL, 2, NULL, 8, 'Musterbank', 'DE89370400440532013000', 'COBADEFFXXX', 'Susanne Schmidt', 4, 1, false), - ('FWDSDB2223_004', 4, '2022-06-01 09:12:45.293', 5, '2002-03-18', 'Frankfurt', 90, NULL, 9, NULL, 22, 'Musterbank', 'DE89370400440532013000', 'COBADEFFXXX', 'Kim Winkler', 4, 1, false), - ('FWDSDB2223_005', 5, '2022-07-01 09:12:45.293', 5, '2002-03-18', 'Frankfurt', 90, NULL, 29, NULL, 20, 'Musterbank', 'DE89370400440532013000', 'COBADEFFXXX', 'Lian Schuster', 2, 1, false); + ('FWDSDB2223_001', 1, '2022-02-01 09:12:45.293', 5, '2002-03-18', 'Frankfurt', 90, NULL, NULL, NULL, 24, 'Musterbank', 'DE89370400440532013000', 'COBADEFFXXX', 'Albert Huber', 4, 1, false, 'volodb/default-files/default-avatar.png'), + ('FWDSDB2223_002', 2, '2022-03-01 09:12:45.293', 5, '2002-03-18', 'Frankfurt', 90, NULL, NULL, NULL, 1, 'Musterbank', 'DE89370400440532013000', 'COBADEFFXXX', 'Roswita Mayer', 3, 1, false, 'volodb/default-files/default-avatar.png'), + ('FWDSDB2223_003', 3, '2022-04-01 09:12:45.293', 5, '2002-03-18', 'Frankfurt', 90, NULL, 2, NULL, 8, 'Musterbank', 'DE89370400440532013000', 'COBADEFFXXX', 'Susanne Schmidt', 4, 1, false, 'volodb/default-files/default-avatar.png'), + ('FWDSDB2223_004', 4, '2022-06-01 09:12:45.293', 5, '2002-03-18', 'Frankfurt', 90, NULL, 9, NULL, 22, 'Musterbank', 'DE89370400440532013000', 'COBADEFFXXX', 'Kim Winkler', 4, 1, false, 'volodb/default-files/default-avatar.png'), + ('FWDSDB2223_005', 5, '2022-07-01 09:12:45.293', 5, '2002-03-18', 'Frankfurt', 90, NULL, 29, NULL, 20, 'Musterbank', 'DE89370400440532013000', 'COBADEFFXXX', 'Lian Schuster', 2, 1, false, 'volodb/default-files/default-avatar.png'); INSERT INTO editing_type (name) VALUES @@ -923,9 +924,9 @@ VALUES INSERT INTO editing_history (editing_type, timestamp, user, volunteer, field, former_value) VALUES - (2, '2023-09-01 09:12:45.293', 'jakob.bopp', 1, 'email', 'die-hubers@t-online.de'), - (1, '2023-09-02 10:37:11.628', 'fabian.urner', 2, 'mobil', '+49 (0) 152 / 089782451'), - (3, '2023-09-05 08:21:58.144', 'magdalena.wiesinger', 3, 'email', 'krieger-koenigin111@gmx.net'); +(2, '2023-09-01 09:12:45.293', 'jakob.bopp@donbosco.de', 1, 'email', 'die-hubers@t-online.de'), + (1, '2023-09-02 10:37:11.628', 'urner@donbosco.de', 2, 'mobil', '+49 (0) 152 / 089782451'), + (3, '2023-09-05 08:21:58.144', 'wiesinger@donbosco.de', 3, 'email', 'krieger-koenigin111@gmx.net'); INSERT INTO program (name, shorthand) VALUES @@ -1012,34 +1013,34 @@ INSERT INTO volunteer_note (timestamp, volunteer, type, note, user) VALUES ('2024-01-10 14:51:39.123', 1, 'phone incoming', 'FW hat angerufen und sich über einen FWD in Jünkerath informiert. Ich habe FW über unseren Träger aufgeklärt und die weiteren Einsatzmöglichkeiten in ganz Deutschland aufgezeigt. -FW möchte nächste Woche zur Messe nach Regensburg kommen. Da klären wir alles weitere.', 'fabian.urner'), - ('2024-01-11 14:51:39.123', 1, 'note', 'Hatte zielführendes Gespräch mit FW auf Messe. Hat noch einige Fragen. Hab vereinbart, dass Sie von Jakob angerufen wird.', 'magdalena.wiesinger'), - ('2024-02-13 14:51:39.123', 1, 'email', 'Hab zum Telefonat vorab bereits Willkommensmail verschickt', 'jakob.bopp'), - ('2024-02-13 14:51:39.123', 1, 'phone outgoing', 'Super gespräch mit FW. Letzte Fragen wurden aufgelöst. FW schickt alle Unterlage bis nächste Woche.', 'jakob.bopp'), +FW möchte nächste Woche zur Messe nach Regensburg kommen. Da klären wir alles weitere.', 'urner@donbosco.de'), + ('2024-01-11 14:51:39.123', 1, 'note', 'Hatte zielführendes Gespräch mit FW auf Messe. Hat noch einige Fragen. Hab vereinbart, dass Sie von Jakob angerufen wird.', 'wiesinger@donbosco.de'), + ('2024-02-13 14:51:39.123', 1, 'email', 'Hab zum Telefonat vorab bereits Willkommensmail verschickt', 'jakob.bopp@donbosco.de'), + ('2024-02-13 14:51:39.123', 1, 'phone outgoing', 'Super gespräch mit FW. Letzte Fragen wurden aufgelöst. FW schickt alle Unterlage bis nächste Woche.', 'jakob.bopp@donbosco.de'), ('2024-01-10 14:51:39.123', 2, 'phone incoming', 'FW hat angerufen und sich über einen FWD in Jünkerath informiert. Ich habe FW über unseren Träger aufgeklärt und die weiteren Einsatzmöglichkeiten in ganz Deutschland aufgezeigt. -FW möchte nächste Woche zur Messe nach Regensburg kommen. Da klären wir alles weitere.', 'fabian.urner'), - ('2024-01-11 14:51:39.123', 2, 'note', 'Hatte zielführendes Gespräch mit FW auf Messe. Hat noch einige Fragen. Hab vereinbart, dass Sie von Jakob angerufen wird.', 'magdalena.wiesinger'), - ('2024-02-13 14:51:39.123', 2, 'email', 'Hab zum Telefonat vorab bereits Willkommensmail verschickt', 'jakob.bopp'), - ('2024-02-13 14:51:39.123', 2, 'phone outgoing', 'Super gespräch mit FW. Letzte Fragen wurden aufgelöst. FW schickt alle Unterlage bis nächste Woche.', 'jakob.bopp'), +FW möchte nächste Woche zur Messe nach Regensburg kommen. Da klären wir alles weitere.', 'urner@donbosco.de'), + ('2024-01-11 14:51:39.123', 2, 'note', 'Hatte zielführendes Gespräch mit FW auf Messe. Hat noch einige Fragen. Hab vereinbart, dass Sie von Jakob angerufen wird.', 'wiesinger@donbosco.de'), + ('2024-02-13 14:51:39.123', 2, 'email', 'Hab zum Telefonat vorab bereits Willkommensmail verschickt', 'jakob.bopp@donbosco.de'), + ('2024-02-13 14:51:39.123', 2, 'phone outgoing', 'Super gespräch mit FW. Letzte Fragen wurden aufgelöst. FW schickt alle Unterlage bis nächste Woche.', 'jakob.bopp@donbosco.de'), ('2024-01-10 14:51:39.123', 3, 'phone incoming', 'FW hat angerufen und sich über einen FWD in Jünkerath informiert. Ich habe FW über unseren Träger aufgeklärt und die weiteren Einsatzmöglichkeiten in ganz Deutschland aufgezeigt. -FW möchte nächste Woche zur Messe nach Regensburg kommen. Da klären wir alles weitere.', 'fabian.urner'), - ('2024-01-11 14:51:39.123', 3, 'note', 'Hatte zielführendes Gespräch mit FW auf Messe. Hat noch einige Fragen. Hab vereinbart, dass Sie von Jakob angerufen wird.', 'magdalena.wiesinger'), - ('2024-02-13 14:51:39.123', 3, 'email', 'Hab zum Telefonat vorab bereits Willkommensmail verschickt', 'jakob.bopp'), - ('2024-02-13 14:51:39.123', 3, 'phone outgoing', 'Super gespräch mit FW. Letzte Fragen wurden aufgelöst. FW schickt alle Unterlage bis nächste Woche.', 'jakob.bopp'), +FW möchte nächste Woche zur Messe nach Regensburg kommen. Da klären wir alles weitere.', 'urner@donbosco.de'), + ('2024-01-11 14:51:39.123', 3, 'note', 'Hatte zielführendes Gespräch mit FW auf Messe. Hat noch einige Fragen. Hab vereinbart, dass Sie von Jakob angerufen wird.', 'wiesinger@donbosco.de'), + ('2024-02-13 14:51:39.123', 3, 'email', 'Hab zum Telefonat vorab bereits Willkommensmail verschickt', 'jakob.bopp@donbosco.de'), + ('2024-02-13 14:51:39.123', 3, 'phone outgoing', 'Super gespräch mit FW. Letzte Fragen wurden aufgelöst. FW schickt alle Unterlage bis nächste Woche.', 'jakob.bopp@donbosco.de'), ('2024-01-10 14:51:39.123', 4, 'phone incoming', 'FW hat angerufen und sich über einen FWD in Jünkerath informiert. Ich habe FW über unseren Träger aufgeklärt und die weiteren Einsatzmöglichkeiten in ganz Deutschland aufgezeigt. -FW möchte nächste Woche zur Messe nach Regensburg kommen. Da klären wir alles weitere.', 'fabian.urner'), - ('2024-01-11 14:51:39.123', 4, 'note', 'Hatte zielführendes Gespräch mit FW auf Messe. Hat noch einige Fragen. Hab vereinbart, dass Sie von Jakob angerufen wird.', 'magdalena.wiesinger'), - ('2024-02-13 14:51:39.123', 4, 'email', 'Hab zum Telefonat vorab bereits Willkommensmail verschickt', 'jakob.bopp'), - ('2024-02-13 14:51:39.123', 4, 'phone outgoing', 'Super gespräch mit FW. Letzte Fragen wurden aufgelöst. FW schickt alle Unterlage bis nächste Woche.', 'jakob.bopp'), +FW möchte nächste Woche zur Messe nach Regensburg kommen. Da klären wir alles weitere.', 'urner@donbosco.de'), + ('2024-01-11 14:51:39.123', 4, 'note', 'Hatte zielführendes Gespräch mit FW auf Messe. Hat noch einige Fragen. Hab vereinbart, dass Sie von Jakob angerufen wird.', 'wiesinger@donbosco.de'), + ('2024-02-13 14:51:39.123', 4, 'email', 'Hab zum Telefonat vorab bereits Willkommensmail verschickt', 'jakob.bopp@donbosco.de'), + ('2024-02-13 14:51:39.123', 4, 'phone outgoing', 'Super gespräch mit FW. Letzte Fragen wurden aufgelöst. FW schickt alle Unterlage bis nächste Woche.', 'jakob.bopp@donbosco.de'), ('2024-01-10 14:51:39.123', 5, 'phone incoming', 'FW hat angerufen und sich über einen FWD in Jünkerath informiert. Ich habe FW über unseren Träger aufgeklärt und die weiteren Einsatzmöglichkeiten in ganz Deutschland aufgezeigt. -FW möchte nächste Woche zur Messe nach Regensburg kommen. Da klären wir alles weitere.', 'fabian.urner'), - ('2024-01-11 14:51:39.123', 5, 'note', 'Hatte zielführendes Gespräch mit FW auf Messe. Hat noch einige Fragen. Hab vereinbart, dass Sie von Jakob angerufen wird.', 'magdalena.wiesinger'), - ('2024-02-13 14:51:39.123', 5, 'email', 'Hab zum Telefonat vorab bereits Willkommensmail verschickt', 'jakob.bopp'), - ('2024-02-13 14:51:39.123', 5, 'phone outgoing', 'Super gespräch mit FW. Letzte Fragen wurden aufgelöst. FW schickt alle Unterlage bis nächste Woche.', 'jakob.bopp'); +FW möchte nächste Woche zur Messe nach Regensburg kommen. Da klären wir alles weitere.', 'urner@donbosco.de'), + ('2024-01-11 14:51:39.123', 5, 'note', 'Hatte zielführendes Gespräch mit FW auf Messe. Hat noch einige Fragen. Hab vereinbart, dass Sie von Jakob angerufen wird.', 'wiesinger@donbosco.de'), + ('2024-02-13 14:51:39.123', 5, 'email', 'Hab zum Telefonat vorab bereits Willkommensmail verschickt', 'jakob.bopp@donbosco.de'), + ('2024-02-13 14:51:39.123', 5, 'phone outgoing', 'Super gespräch mit FW. Letzte Fragen wurden aufgelöst. FW schickt alle Unterlage bis nächste Woche.', 'jakob.bopp@donbosco.de'); INSERT INTO volunteer_document_type (name, description) VALUES @@ -1052,33 +1053,33 @@ FW möchte nächste Woche zur Messe nach Regensburg kommen. Da klären wir alles INSERT INTO volunteer_document (timestamp, volunteer, type, size, path, user) VALUES - ('2024-03-18 13:39:22.321', 1, 1, 232002, 'docs/folder/file1.pdf', 'fabian.urner'), - ('2024-03-18 13:39:22.321', 1, 1, 436022, 'docs/folder/file2.pdf', 'fabian.urner'), - ('2024-03-18 13:39:22.321', 1, 1, 1946542, 'docs/folder/file3.jpg', 'magdalena.wiesinger'), - ('2024-03-18 13:39:22.321', 1, 5, 202002, 'docs/folder/file4.pdf', 'fabian.urner'), - ('2024-03-18 13:39:22.321', 1, 2, 332002, 'docs/folder/file5.pdf', 'fabian.urner'), - ('2024-03-18 13:39:22.321', 1, 4, 2123002, 'docs/folder/file6.jpg', 'fabian.urner'), - ('2024-03-18 13:39:22.321', 2, 1, 232002, 'docs/folder/file1.pdf', 'magdalena.wiesinger'), - ('2024-03-18 13:39:22.321', 2, 1, 436022, 'docs/folder/file2.pdf', 'magdalena.wiesinger'), - ('2024-03-18 13:39:22.321', 2, 1, 1946542, 'docs/folder/file3.jpg', 'jakob.bopp'), - ('2024-03-18 13:39:22.321', 2, 5, 202002, 'docs/folder/file4.pdf', 'magdalena.wiesinger'), - ('2024-03-18 13:39:22.321', 2, 2, 332002, 'docs/folder/file5.pdf', 'magdalena.wiesinger'), - ('2024-03-18 13:39:22.321', 2, 4, 2123002, 'docs/folder/file6.jpg', 'magdalena.wiesinger'), - ('2024-03-18 13:39:22.321', 3, 1, 232002, 'docs/folder/file1.pdf', 'jakob.bopp'), - ('2024-03-18 13:39:22.321', 3, 1, 436022, 'docs/folder/file2.pdf', 'jakob.bopp'), - ('2024-03-18 13:39:22.321', 3, 1, 1946542, 'docs/folder/file3.jpg', 'jakob.bopp'), - ('2024-03-18 13:39:22.321', 3, 5, 202002, 'docs/folder/file4.pdf', 'magdalena.wiesinger'), - ('2024-03-18 13:39:22.321', 3, 2, 332002, 'docs/folder/file5.pdf', 'jakob.bopp'), - ('2024-03-18 13:39:22.321', 3, 4, 2123002, 'docs/folder/file6.jpg', 'jakob.bopp'), - ('2024-03-18 13:39:22.321', 4, 1, 232002, 'docs/folder/file1.pdf', 'magdalena.wiesinger'), - ('2024-03-18 13:39:22.321', 4, 1, 436022, 'docs/folder/file2.pdf', 'magdalena.wiesinger'), - ('2024-03-18 13:39:22.321', 4, 1, 1946542, 'docs/folder/file3.jpg', 'magdalena.wiesinger'), - ('2024-03-18 13:39:22.321', 4, 5, 202002, 'docs/folder/file4.pdf', 'jakob.bopp'), - ('2024-03-18 13:39:22.321', 4, 2, 332002, 'docs/folder/file5.pdf', 'magdalena.wiesinger'), - ('2024-03-18 13:39:22.321', 4, 4, 2123002, 'docs/folder/file6.jpg', 'magdalena.wiesinger'), - ('2024-03-18 13:39:22.321', 5, 1, 232002, 'docs/folder/file1.pdf', 'jakob.bopp'), - ('2024-03-18 13:39:22.321', 5, 1, 436022, 'docs/folder/file2.pdf', 'fabian.urner'), - ('2024-03-18 13:39:22.321', 5, 1, 1946542, 'docs/folder/file3.jpg', 'jakob.bopp'), - ('2024-03-18 13:39:22.321', 5, 5, 202002, 'docs/folder/file4.pdf', 'jakob.bopp'), - ('2024-03-18 13:39:22.321', 5, 2, 332002, 'docs/folder/file5.pdf', 'jakob.bopp'), - ('2024-03-18 13:39:22.321', 5, 4, 2123002, 'docs/folder/file6.jpg', 'jakob.bopp'); \ No newline at end of file + ('2024-03-18 13:39:22.321', 1, 1, 232002, 'docs/folder/file1.pdf', 'urner@donbosco.de'), + ('2024-03-18 13:39:22.321', 1, 1, 436022, 'docs/folder/file2.pdf', 'urner@donbosco.de'), + ('2024-03-18 13:39:22.321', 1, 1, 1946542, 'docs/folder/file3.jpg', 'wiesinger@donbosco.de'), + ('2024-03-18 13:39:22.321', 1, 5, 202002, 'docs/folder/file4.pdf', 'urner@donbosco.de'), + ('2024-03-18 13:39:22.321', 1, 2, 332002, 'docs/folder/file5.pdf', 'urner@donbosco.de'), + ('2024-03-18 13:39:22.321', 1, 4, 2123002, 'docs/folder/file6.jpg', 'urner@donbosco.de'), + ('2024-03-18 13:39:22.321', 2, 1, 232002, 'docs/folder/file1.pdf', 'wiesinger@donbosco.de'), + ('2024-03-18 13:39:22.321', 2, 1, 436022, 'docs/folder/file2.pdf', 'wiesinger@donbosco.de'), + ('2024-03-18 13:39:22.321', 2, 1, 1946542, 'docs/folder/file3.jpg', 'jakob.bopp@donbosco.de'), + ('2024-03-18 13:39:22.321', 2, 5, 202002, 'docs/folder/file4.pdf', 'wiesinger@donbosco.de'), + ('2024-03-18 13:39:22.321', 2, 2, 332002, 'docs/folder/file5.pdf', 'wiesinger@donbosco.de'), + ('2024-03-18 13:39:22.321', 2, 4, 2123002, 'docs/folder/file6.jpg', 'wiesinger@donbosco.de'), + ('2024-03-18 13:39:22.321', 3, 1, 232002, 'docs/folder/file1.pdf', 'jakob.bopp@donbosco.de'), + ('2024-03-18 13:39:22.321', 3, 1, 436022, 'docs/folder/file2.pdf', 'jakob.bopp@donbosco.de'), + ('2024-03-18 13:39:22.321', 3, 1, 1946542, 'docs/folder/file3.jpg', 'jakob.bopp@donbosco.de'), + ('2024-03-18 13:39:22.321', 3, 5, 202002, 'docs/folder/file4.pdf', 'wiesinger@donbosco.de'), + ('2024-03-18 13:39:22.321', 3, 2, 332002, 'docs/folder/file5.pdf', 'jakob.bopp@donbosco.de'), + ('2024-03-18 13:39:22.321', 3, 4, 2123002, 'docs/folder/file6.jpg', 'jakob.bopp@donbosco.de'), + ('2024-03-18 13:39:22.321', 4, 1, 232002, 'docs/folder/file1.pdf', 'wiesinger@donbosco.de'), + ('2024-03-18 13:39:22.321', 4, 1, 436022, 'docs/folder/file2.pdf', 'wiesinger@donbosco.de'), + ('2024-03-18 13:39:22.321', 4, 1, 1946542, 'docs/folder/file3.jpg', 'wiesinger@donbosco.de'), + ('2024-03-18 13:39:22.321', 4, 5, 202002, 'docs/folder/file4.pdf', 'jakob.bopp@donbosco.de'), + ('2024-03-18 13:39:22.321', 4, 2, 332002, 'docs/folder/file5.pdf', 'wiesinger@donbosco.de'), + ('2024-03-18 13:39:22.321', 4, 4, 2123002, 'docs/folder/file6.jpg', 'wiesinger@donbosco.de'), + ('2024-03-18 13:39:22.321', 5, 1, 232002, 'docs/folder/file1.pdf', 'jakob.bopp@donbosco.de'), + ('2024-03-18 13:39:22.321', 5, 1, 436022, 'docs/folder/file2.pdf', 'urner@donbosco.de'), + ('2024-03-18 13:39:22.321', 5, 1, 1946542, 'docs/folder/file3.jpg', 'jakob.bopp@donbosco.de'), + ('2024-03-18 13:39:22.321', 5, 5, 202002, 'docs/folder/file4.pdf', 'jakob.bopp@donbosco.de'), + ('2024-03-18 13:39:22.321', 5, 2, 332002, 'docs/folder/file5.pdf', 'jakob.bopp@donbosco.de'), + ('2024-03-18 13:39:22.321', 5, 4, 2123002, 'docs/folder/file6.jpg', 'jakob.bopp@donbosco.de'); \ No newline at end of file diff --git a/sql/volodb.sql b/sql/volodb.sql index 678251a..73923e0 100644 --- a/sql/volodb.sql +++ b/sql/volodb.sql @@ -51,11 +51,12 @@ CREATE TABLE `contact_type` ( DROP TABLE IF EXISTS `user`; CREATE TABLE `user` ( - `username` VARCHAR(50) NOT NULL, + `email` VARCHAR(50) NOT NULL, `person` INT NOT NULL, `secret` VARCHAR(100) NOT NULL, `organisational_role` VARCHAR(50), - PRIMARY KEY (`username`) + `avatar` TEXT, + PRIMARY KEY (`email`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1; DROP TABLE IF EXISTS `user_role`; @@ -319,7 +320,7 @@ CREATE TABLE `volunteer_document_type` ( ALTER TABLE `user` ADD FOREIGN KEY (`person`) REFERENCES `person` (`id`); -ALTER TABLE `user_role_mapping` ADD FOREIGN KEY (`user`) REFERENCES `user` (`username`); +ALTER TABLE `user_role_mapping` ADD FOREIGN KEY (`user`) REFERENCES `user` (`email`); ALTER TABLE `user_role_mapping` ADD FOREIGN KEY (`user_role`) REFERENCES `user_role` (`id`); @@ -351,7 +352,7 @@ ALTER TABLE `volunteer` ADD FOREIGN KEY (`religion`) REFERENCES `religion` (`id` ALTER TABLE `editing_history` ADD FOREIGN KEY (`volunteer`) REFERENCES `volunteer` (`id`); -ALTER TABLE `editing_history` ADD FOREIGN KEY (`user`) REFERENCES `user` (`username`); +ALTER TABLE `editing_history` ADD FOREIGN KEY (`user`) REFERENCES `user` (`email`); ALTER TABLE `editing_history` ADD FOREIGN KEY (`editing_type`) REFERENCES `editing_type` (`id`); @@ -383,10 +384,10 @@ ALTER TABLE `contract_modification` ADD FOREIGN KEY (`status`) REFERENCES `contr ALTER TABLE `volunteer_note` ADD FOREIGN KEY (`volunteer`) REFERENCES `volunteer` (`id`); -ALTER TABLE `volunteer_note` ADD FOREIGN KEY (`user`) REFERENCES `user` (`username`); +ALTER TABLE `volunteer_note` ADD FOREIGN KEY (`user`) REFERENCES `user` (`email`); ALTER TABLE `volunteer_document` ADD FOREIGN KEY (`volunteer`) REFERENCES `volunteer` (`id`); ALTER TABLE `volunteer_document` ADD FOREIGN KEY (`type`) REFERENCES `volunteer_document_type` (`id`); -ALTER TABLE `volunteer_document` ADD FOREIGN KEY (`user`) REFERENCES `user` (`username`); \ No newline at end of file +ALTER TABLE `volunteer_document` ADD FOREIGN KEY (`user`) REFERENCES `user` (`email`); \ No newline at end of file diff --git a/src/main/java/dev/urner/volodb/entity/User.java b/src/main/java/dev/urner/volodb/entity/User.java index 68cf201..09098d5 100644 --- a/src/main/java/dev/urner/volodb/entity/User.java +++ b/src/main/java/dev/urner/volodb/entity/User.java @@ -9,38 +9,36 @@ import lombok.Getter; import lombok.Setter; - @Entity -@Table(name="User") +@Table(name = "User") @Getter @Setter public class User { - - //Username + + // Username @Id - @Column(name = "username") + @Column(name = "email") private String username; @OneToOne - @JoinColumn(name = "person") //FK + @JoinColumn(name = "person") // FK private Person person; - //Secret + // Secret @JsonIgnore @Column(name = "secret") private String secret; - - //user_roles + + // user_roles @ManyToMany - @JoinTable( - name = "user_role_mapping", - joinColumns = @JoinColumn(name = "user"), - inverseJoinColumns = @JoinColumn(name = "user_role")) - private List roles; + @JoinTable(name = "user_role_mapping", joinColumns = @JoinColumn(name = "user"), inverseJoinColumns = @JoinColumn(name = "user_role")) + private List roles; - //organisational_role + // organisational_role @Column(name = "organisationalRole") private String organisationalRole; - + @Column(name = "avatar") + private String avatar; + } diff --git a/src/main/java/dev/urner/volodb/rest/AuthRestController.java b/src/main/java/dev/urner/volodb/rest/AuthRestController.java index b78bbc5..ae3cd34 100644 --- a/src/main/java/dev/urner/volodb/rest/AuthRestController.java +++ b/src/main/java/dev/urner/volodb/rest/AuthRestController.java @@ -66,23 +66,25 @@ public LoginResponse login(@RequestBody @Validated LoginRequest request) { } @ExceptionHandler - public ResponseEntity handleException(UserNotFoundException exc) { - AuthErrorResponse error = new AuthErrorResponse( - HttpStatus.NOT_FOUND.value(), + public ResponseEntity handleException(UserNotFoundException exc) { + HttpStatus httpStatus = HttpStatus.NOT_FOUND; + VolodbErrorResponse error = new VolodbErrorResponse( + httpStatus.value(), exc.getMessage(), System.currentTimeMillis()); - return new ResponseEntity<>(error, HttpStatus.NOT_FOUND); + return new ResponseEntity<>(error, httpStatus); } @ExceptionHandler - public ResponseEntity handleException(TokenExpiredException exc) { - AuthErrorResponse error = new AuthErrorResponse( - HttpStatus.UNAUTHORIZED.value(), + public ResponseEntity handleException(TokenExpiredException exc) { + HttpStatus httpStatus = HttpStatus.UNAUTHORIZED; + VolodbErrorResponse error = new VolodbErrorResponse( + httpStatus.value(), exc.getMessage(), System.currentTimeMillis()); - return new ResponseEntity<>(error, HttpStatus.UNAUTHORIZED); + return new ResponseEntity<>(error, httpStatus); } } diff --git a/src/main/java/dev/urner/volodb/rest/ContractErrorResponse.java b/src/main/java/dev/urner/volodb/rest/ContractErrorResponse.java deleted file mode 100644 index 69f72c7..0000000 --- a/src/main/java/dev/urner/volodb/rest/ContractErrorResponse.java +++ /dev/null @@ -1,16 +0,0 @@ -package dev.urner.volodb.rest; - -import lombok.Getter; -import lombok.RequiredArgsConstructor; -import lombok.Setter; - -@Getter -@Setter -@RequiredArgsConstructor -public class ContractErrorResponse { - private int status; - - private String message; - - private long timeStamp; -} diff --git a/src/main/java/dev/urner/volodb/rest/FileRestController.java b/src/main/java/dev/urner/volodb/rest/FileRestController.java index ec48044..0c8529d 100644 --- a/src/main/java/dev/urner/volodb/rest/FileRestController.java +++ b/src/main/java/dev/urner/volodb/rest/FileRestController.java @@ -44,16 +44,16 @@ public void getTestMethod(@PathVariable("bucket") String bucket, HttpServletRequ } @ExceptionHandler - public ResponseEntity handleException(RuntimeException exc) { - VolunteerErrorResponse error = new VolunteerErrorResponse(); + public ResponseEntity handleException(RuntimeException exc) { - HttpStatus status = HttpStatus.BAD_REQUEST; + HttpStatus httpStatus = HttpStatus.BAD_REQUEST; - error.setStatus(status.value()); - error.setMessage(exc.getMessage()); - error.setTimeStamp(System.currentTimeMillis()); + VolodbErrorResponse error = new VolodbErrorResponse( + httpStatus.value(), + exc.getMessage(), + System.currentTimeMillis()); - return new ResponseEntity<>(error, status); + return new ResponseEntity<>(error, httpStatus); } } diff --git a/src/main/java/dev/urner/volodb/rest/ProjectErrorResponse.java b/src/main/java/dev/urner/volodb/rest/ProjectErrorResponse.java deleted file mode 100644 index 269ff80..0000000 --- a/src/main/java/dev/urner/volodb/rest/ProjectErrorResponse.java +++ /dev/null @@ -1,16 +0,0 @@ -package dev.urner.volodb.rest; - -import lombok.Getter; -import lombok.RequiredArgsConstructor; -import lombok.Setter; - -@Getter -@Setter -@RequiredArgsConstructor -public class ProjectErrorResponse { - private int status; - - private String message; - - private long timeStamp; -} diff --git a/src/main/java/dev/urner/volodb/rest/ProjectRestController.java b/src/main/java/dev/urner/volodb/rest/ProjectRestController.java index d65f9fb..d527be8 100644 --- a/src/main/java/dev/urner/volodb/rest/ProjectRestController.java +++ b/src/main/java/dev/urner/volodb/rest/ProjectRestController.java @@ -13,7 +13,7 @@ import dev.urner.volodb.service.ProjectService; import lombok.RequiredArgsConstructor; -import java.util.List; +import java.lang.System; import java.util.Map; @RestController @@ -89,53 +89,49 @@ public String deleteProjectById(@PathVariable int projectId) { // Exception-Hanlder: @ExceptionHandler - public ResponseEntity handleException(ProjectNotFoundException exc) { - ProjectErrorResponse error = new ProjectErrorResponse(); - + public ResponseEntity handleException(ProjectNotFoundException exc) { HttpStatus httpStatus = HttpStatus.NOT_FOUND; - error.setStatus(httpStatus.value()); - error.setMessage(exc.getMessage()); - error.setTimeStamp(System.currentTimeMillis()); + VolodbErrorResponse error = new VolodbErrorResponse( + httpStatus.value(), + exc.getMessage(), + System.currentTimeMillis()); return new ResponseEntity<>(error, httpStatus); } @ExceptionHandler - public ResponseEntity handleException(ProjectInvalidFormatException exc) { - ProjectErrorResponse error = new ProjectErrorResponse(); - + public ResponseEntity handleException(ProjectInvalidFormatException exc) { HttpStatus httpStatus = HttpStatus.BAD_REQUEST; - error.setStatus(httpStatus.value()); - error.setMessage(exc.getMessage()); - error.setTimeStamp(System.currentTimeMillis()); + VolodbErrorResponse error = new VolodbErrorResponse( + httpStatus.value(), + exc.getMessage(), + System.currentTimeMillis()); return new ResponseEntity<>(error, httpStatus); } @ExceptionHandler - public ResponseEntity handleException(CountryNotFoundException exc) { - ProjectErrorResponse error = new ProjectErrorResponse(); - + public ResponseEntity handleException(CountryNotFoundException exc) { HttpStatus httpStatus = HttpStatus.NOT_FOUND; - error.setStatus(httpStatus.value()); - error.setMessage(exc.getMessage()); - error.setTimeStamp(System.currentTimeMillis()); + VolodbErrorResponse error = new VolodbErrorResponse( + httpStatus.value(), + exc.getMessage(), + System.currentTimeMillis()); return new ResponseEntity<>(error, httpStatus); } @ExceptionHandler - public ResponseEntity handleException(RuntimeException exc) { - ProjectErrorResponse error = new ProjectErrorResponse(); - + public ResponseEntity handleException(RuntimeException exc) { HttpStatus httpStatus = HttpStatus.BAD_REQUEST; - error.setStatus(httpStatus.value()); - error.setMessage(exc.getMessage()); - error.setTimeStamp(System.currentTimeMillis()); + VolodbErrorResponse error = new VolodbErrorResponse( + httpStatus.value(), + exc.getMessage(), + System.currentTimeMillis()); return new ResponseEntity<>(error, httpStatus); } diff --git a/src/main/java/dev/urner/volodb/rest/UserRestController.java b/src/main/java/dev/urner/volodb/rest/UserRestController.java new file mode 100644 index 0000000..bac309d --- /dev/null +++ b/src/main/java/dev/urner/volodb/rest/UserRestController.java @@ -0,0 +1,48 @@ +package dev.urner.volodb.rest; + +import org.springframework.web.bind.annotation.RestController; + +import dev.urner.volodb.entity.User; +import dev.urner.volodb.entity.UserNotFoundException; +import dev.urner.volodb.security.UserPrincipal; +import dev.urner.volodb.service.UserService; +import lombok.RequiredArgsConstructor; + +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.security.core.annotation.AuthenticationPrincipal; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; + +@RestController +@RequestMapping("/user") +@RequiredArgsConstructor +public class UserRestController { + + private final UserService userService; + + @GetMapping() + public User getUser(@AuthenticationPrincipal UserPrincipal principal) { + User theUser = userService.findByUsername(principal.getUsername()); + + if (theUser == null) { + throw new UserNotFoundException("Username not found - " + principal.getUsername()); + } + + return theUser; + } + + @ExceptionHandler + public ResponseEntity handleException(UserNotFoundException exc) { + HttpStatus httpStatus = HttpStatus.NOT_FOUND; + + VolodbErrorResponse error = new VolodbErrorResponse( + httpStatus.value(), + exc.getMessage(), + System.currentTimeMillis()); + + return new ResponseEntity<>(error, httpStatus); + } + +} diff --git a/src/main/java/dev/urner/volodb/rest/AuthErrorResponse.java b/src/main/java/dev/urner/volodb/rest/VolodbErrorResponse.java similarity index 87% rename from src/main/java/dev/urner/volodb/rest/AuthErrorResponse.java rename to src/main/java/dev/urner/volodb/rest/VolodbErrorResponse.java index 9880322..c008ffe 100644 --- a/src/main/java/dev/urner/volodb/rest/AuthErrorResponse.java +++ b/src/main/java/dev/urner/volodb/rest/VolodbErrorResponse.java @@ -7,7 +7,7 @@ @RequiredArgsConstructor @Getter @Setter -public class AuthErrorResponse { +public class VolodbErrorResponse { private final int status; private final String message; private final long timeStamp; diff --git a/src/main/java/dev/urner/volodb/rest/VolunteerErrorResponse.java b/src/main/java/dev/urner/volodb/rest/VolunteerErrorResponse.java deleted file mode 100644 index 79e2a05..0000000 --- a/src/main/java/dev/urner/volodb/rest/VolunteerErrorResponse.java +++ /dev/null @@ -1,16 +0,0 @@ -package dev.urner.volodb.rest; - -import lombok.Getter; -import lombok.RequiredArgsConstructor; -import lombok.Setter; - -@Getter -@Setter -@RequiredArgsConstructor -public class VolunteerErrorResponse { - - private int status; - private String message; - private long timeStamp; - -} diff --git a/src/main/java/dev/urner/volodb/rest/VolunteerRestController.java b/src/main/java/dev/urner/volodb/rest/VolunteerRestController.java index 787bf0d..365a53c 100644 --- a/src/main/java/dev/urner/volodb/rest/VolunteerRestController.java +++ b/src/main/java/dev/urner/volodb/rest/VolunteerRestController.java @@ -21,6 +21,7 @@ import dev.urner.volodb.service.VolunteerService; import lombok.RequiredArgsConstructor; +import java.lang.System; import java.util.Map; import java.time.LocalDateTime; import org.springframework.web.bind.annotation.PostMapping; @@ -207,41 +208,38 @@ public VolunteerDocument postNewDocument( // ********************************** @ExceptionHandler - public ResponseEntity handleException(VolunteerNotFoundException exc) { - VolunteerErrorResponse error = new VolunteerErrorResponse(); + public ResponseEntity handleException(VolunteerNotFoundException exc) { + HttpStatus httpStatus = HttpStatus.NOT_FOUND; - HttpStatus status = HttpStatus.NOT_FOUND; + VolodbErrorResponse error = new VolodbErrorResponse( + httpStatus.value(), + exc.getMessage(), + System.currentTimeMillis()); - error.setStatus(status.value()); - error.setMessage(exc.getMessage()); - error.setTimeStamp(System.currentTimeMillis()); - - return new ResponseEntity<>(error, status); + return new ResponseEntity<>(error, httpStatus); } @ExceptionHandler - public ResponseEntity handleException(VolunteerInvalidFormatException exc) { - VolunteerErrorResponse error = new VolunteerErrorResponse(); - - HttpStatus status = HttpStatus.BAD_REQUEST; + public ResponseEntity handleException(VolunteerInvalidFormatException exc) { + HttpStatus httpStatus = HttpStatus.BAD_REQUEST; - error.setStatus(status.value()); - error.setMessage(exc.getMessage()); - error.setTimeStamp(System.currentTimeMillis()); + VolodbErrorResponse error = new VolodbErrorResponse( + httpStatus.value(), + exc.getMessage(), + System.currentTimeMillis()); - return new ResponseEntity<>(error, status); + return new ResponseEntity<>(error, httpStatus); } @ExceptionHandler - public ResponseEntity handleException(RuntimeException exc) { - VolunteerErrorResponse error = new VolunteerErrorResponse(); - - HttpStatus status = HttpStatus.BAD_REQUEST; + public ResponseEntity handleException(RuntimeException exc) { + HttpStatus httpStatus = HttpStatus.BAD_REQUEST; - error.setStatus(status.value()); - error.setMessage(exc.getMessage()); - error.setTimeStamp(System.currentTimeMillis()); + VolodbErrorResponse error = new VolodbErrorResponse( + httpStatus.value(), + exc.getMessage(), + System.currentTimeMillis()); - return new ResponseEntity<>(error, status); + return new ResponseEntity<>(error, httpStatus); } }