From 2690e7a6f1d39d9e4200133974510096d9f9ffa1 Mon Sep 17 00:00:00 2001 From: AdrianBalunan Date: Wed, 15 Apr 2026 20:09:16 +0200 Subject: [PATCH] ACTUALL FIX: Forget about previous commits. This is the fix: When creating charities a *Random UUID*. When running it again same API-object turned into charities will have different UUID, breaking foreign key contraint. This is why when there are no tables it will work (cuz it gets inserted for the first time) and doesnt work on the second (now inserting the same api data, with different UUID). --- docs/SqlDatabase/ER-DiagramFile.mwb | Bin 17956 -> 17828 bytes etUUID(uuid); | 324 ++++++++++++++++++ .../team6/database/DatabaseSetup.java | 2 +- .../systemutvikling/team6/models/Charity.java | 8 +- .../team6/service/APIToDatabaseService.java | 9 +- 5 files changed, 337 insertions(+), 6 deletions(-) create mode 100644 etUUID(uuid); diff --git a/docs/SqlDatabase/ER-DiagramFile.mwb b/docs/SqlDatabase/ER-DiagramFile.mwb index 15edab11cde238403e4280d28454b3e62fa96431..c43ee851d8fb78e57a2940eef8fb6869b8e7e774 100644 GIT binary patch delta 15204 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 diff --git a/etUUID(uuid); b/etUUID(uuid); new file mode 100644 index 00000000..74570f66 --- /dev/null +++ b/etUUID(uuid); @@ -0,0 +1,324 @@ + + SSUUMMMMAARRYY OOFF LLEESSSS CCOOMMMMAANNDDSS + + Commands marked with * may be preceded by a number, _N. + Notes in parentheses indicate the behavior if _N is given. + A key preceded by a caret indicates the Ctrl key; thus ^K is ctrl-K. + + h H Display this help. + q :q Q :Q ZZ Exit. + --------------------------------------------------------------------------- + + MMOOVVIINNGG + + e ^E j ^N CR * Forward one line (or _N lines). + y ^Y k ^K ^P * Backward one line (or _N lines). + ESC-j * Forward one file line (or _N file lines). + ESC-k * Backward one file line (or _N file lines). + f ^F ^V SPACE * Forward one window (or _N lines). + b ^B ESC-v * Backward one window (or _N lines). + z * Forward one window (and set window to _N). + w * Backward one window (and set window to _N). + ESC-SPACE * Forward one window, but don't stop at end-of-file. + ESC-b * Backward one window, but don't stop at beginning-of-file. + d ^D * Forward one half-window (and set half-window to _N). + u ^U * Backward one half-window (and set half-window to _N). + ESC-) RightArrow * Right one half screen width (or _N positions). + ESC-( LeftArrow * Left one half screen width (or _N positions). + ESC-} ^RightArrow Right to last column displayed. + ESC-{ ^LeftArrow Left to first column. + F Forward forever; like "tail -f". + ESC-F Like F but stop when search pattern is found. + r ^R ^L Repaint screen. + R Repaint screen, discarding buffered input. + --------------------------------------------------- + Default "window" is the screen height. + Default "half-window" is half of the screen height. + --------------------------------------------------------------------------- + + SSEEAARRCCHHIINNGG + + /_p_a_t_t_e_r_n * Search forward for (_N-th) matching line. + ?_p_a_t_t_e_r_n * Search backward for (_N-th) matching line. + n * Repeat previous search (for _N-th occurrence). + N * Repeat previous search in reverse direction. + ESC-n * Repeat previous search, spanning files. + ESC-N * Repeat previous search, reverse dir. & spanning files. + ^O^N ^On * Search forward for (_N-th) OSC8 hyperlink. + ^O^P ^Op * Search backward for (_N-th) OSC8 hyperlink. + ^O^L ^Ol Jump to the currently selected OSC8 hyperlink. + ESC-u Undo (toggle) search highlighting. + ESC-U Clear search highlighting. + &_p_a_t_t_e_r_n * Display only matching lines. + --------------------------------------------------- + Search is case-sensitive unless changed with -i or -I. + A search pattern may begin with one or more of: + ^N or ! Search for NON-matching lines. + ^E or * Search multiple files (pass thru END OF FILE). + ^F or @ Start search at FIRST file (for /) or last file (for ?). + ^K Highlight matches, but don't move (KEEP position). + ^R Don't use REGULAR EXPRESSIONS. + ^S _n Search for match in _n-th parenthesized subpattern. + ^W WRAP search if no match found. + ^L Enter next character literally into pattern. + --------------------------------------------------------------------------- + + JJUUMMPPIINNGG + + g < ESC-< * Go to first line in file (or line _N). + G > ESC-> * Go to last line in file (or line _N). + p % * Go to beginning of file (or _N percent into file). + t * Go to the (_N-th) next tag. + T * Go to the (_N-th) previous tag. + { ( [ * Find close bracket } ) ]. + } ) ] * Find open bracket { ( [. + ESC-^F _<_c_1_> _<_c_2_> * Find close bracket _<_c_2_>. + ESC-^B _<_c_1_> _<_c_2_> * Find open bracket _<_c_1_>. + --------------------------------------------------- + Each "find close bracket" command goes forward to the close bracket + matching the (_N-th) open bracket in the top line. + Each "find open bracket" command goes backward to the open bracket + matching the (_N-th) close bracket in the bottom line. + + m_<_l_e_t_t_e_r_> Mark the current top line with . + M_<_l_e_t_t_e_r_> Mark the current bottom line with . + '_<_l_e_t_t_e_r_> Go to a previously marked position. + '' Go to the previous position. + ^X^X Same as '. + ESC-m_<_l_e_t_t_e_r_> Clear a mark. + --------------------------------------------------- + A mark is any upper-case or lower-case letter. + Certain marks are predefined: + ^ means beginning of the file + $ means end of the file + --------------------------------------------------------------------------- + + CCHHAANNGGIINNGG FFIILLEESS + + :e [_f_i_l_e] Examine a new file. + ^X^V Same as :e. + :n * Examine the (_N-th) next file from the command line. + :p * Examine the (_N-th) previous file from the command line. + :x * Examine the first (or _N-th) file from the command line. + ^O^O Open the currently selected OSC8 hyperlink. + :d Delete the current file from the command line list. + = ^G :f Print current file name. + --------------------------------------------------------------------------- + + MMIISSCCEELLLLAANNEEOOUUSS CCOOMMMMAANNDDSS + + -_<_f_l_a_g_> Toggle a command line option [see OPTIONS below]. + --_<_n_a_m_e_> Toggle a command line option, by name. + __<_f_l_a_g_> Display the setting of a command line option. + ___<_n_a_m_e_> Display the setting of an option, by name. + +_c_m_d Execute the less cmd each time a new file is examined. + + !_c_o_m_m_a_n_d Execute the shell command with $SHELL. + #_c_o_m_m_a_n_d Execute the shell command, expanded like a prompt. + |XX_c_o_m_m_a_n_d Pipe file between current pos & mark XX to shell command. + s _f_i_l_e Save input to a file. + v Edit the current file with $VISUAL or $EDITOR. + V Print version number of "less". + --------------------------------------------------------------------------- + + OOPPTTIIOONNSS + + Most options may be changed either on the command line, + or from within less by using the - or -- command. + Options may be given in one of two forms: either a single + character preceded by a -, or a name preceded by --. + + -? ........ --help + Display help (from command line). + -a ........ --search-skip-screen + Search skips current screen. + -A ........ --SEARCH-SKIP-SCREEN + Search starts just after target line. + -b [_N] .... --buffers=[_N] + Number of buffers. + -B ........ --auto-buffers + Don't automatically allocate buffers for pipes. + -c ........ --clear-screen + Repaint by clearing rather than scrolling. + -d ........ --dumb + Dumb terminal. + -D xx_c_o_l_o_r . --color=xx_c_o_l_o_r + Set screen colors. + -e -E .... --quit-at-eof --QUIT-AT-EOF + Quit at end of file. + -f ........ --force + Force open non-regular files. + -F ........ --quit-if-one-screen + Quit if entire file fits on first screen. + -g ........ --hilite-search + Highlight only last match for searches. + -G ........ --HILITE-SEARCH + Don't highlight any matches for searches. + -h [_N] .... --max-back-scroll=[_N] + Backward scroll limit. + -i ........ --ignore-case + Ignore case in searches that do not contain uppercase. + -I ........ --IGNORE-CASE + Ignore case in all searches. + -j [_N] .... --jump-target=[_N] + Screen position of target lines. + -J ........ --status-column + Display a status column at left edge of screen. + -k _f_i_l_e ... --lesskey-file=_f_i_l_e + Use a compiled lesskey file. + -K ........ --quit-on-intr + Exit less in response to ctrl-C. + -L ........ --no-lessopen + Ignore the LESSOPEN environment variable. + -m -M .... --long-prompt --LONG-PROMPT + Set prompt style. + -n ......... --line-numbers + Suppress line numbers in prompts and messages. + -N ......... --LINE-NUMBERS + Display line number at start of each line. + -o [_f_i_l_e] .. --log-file=[_f_i_l_e] + Copy to log file (standard input only). + -O [_f_i_l_e] .. --LOG-FILE=[_f_i_l_e] + Copy to log file (unconditionally overwrite). + -p _p_a_t_t_e_r_n . --pattern=[_p_a_t_t_e_r_n] + Start at pattern (from command line). + -P [_p_r_o_m_p_t] --prompt=[_p_r_o_m_p_t] + Define new prompt. + -q -Q .... --quiet --QUIET --silent --SILENT + Quiet the terminal bell. + -r -R .... --raw-control-chars --RAW-CONTROL-CHARS + Output "raw" control characters. + -s ........ --squeeze-blank-lines + Squeeze multiple blank lines. + -S ........ --chop-long-lines + Chop (truncate) long lines rather than wrapping. + -t _t_a_g .... --tag=[_t_a_g] + Find a tag. + -T [_t_a_g_s_f_i_l_e] --tag-file=[_t_a_g_s_f_i_l_e] + Use an alternate tags file. + -u -U .... --underline-special --UNDERLINE-SPECIAL + Change handling of backspaces, tabs and carriage returns. + -V ........ --version + Display the version number of "less". + -w ........ --hilite-unread + Highlight first new line after forward-screen. + -W ........ --HILITE-UNREAD + Highlight first new line after any forward movement. + -x [_N[,...]] --tabs=[_N[,...]] + Set tab stops. + -X ........ --no-init + Don't use termcap init/deinit strings. + -y [_N] .... --max-forw-scroll=[_N] + Forward scroll limit. + -z [_N] .... --window=[_N] + Set size of window. + -" [_c[_c]] . --quotes=[_c[_c]] + Set shell quote characters. + -~ ........ --tilde + Don't display tildes after end of file. + -# [_N] .... --shift=[_N] + Set horizontal scroll amount (0 = one half screen width). + + --exit-follow-on-close + Exit F command on a pipe when writer closes pipe. + --file-size + Automatically determine the size of the input file. + --follow-name + The F command changes files if the input file is renamed. + --form-feed + Stop scrolling when a form feed character is reached. + --header=[_L[,_C[,_N]]] + Use _L lines (starting at line _N) and _C columns as headers. + --incsearch + Search file as each pattern character is typed in. + --intr=[_C] + Use _C instead of ^X to interrupt a read. + --lesskey-context=_t_e_x_t + Use lesskey source file contents. + --lesskey-src=_f_i_l_e + Use a lesskey source file. + --line-num-width=[_N] + Set the width of the -N line number field to _N characters. + --match-shift=[_N] + Show at least _N characters to the left of a search match. + --modelines=[_N] + Read _N lines from the input file and look for vim modelines. + --mouse + Enable mouse input. + --no-edit-warn + Don't warn when using v command on a file opened via LESSOPEN. + --no-keypad + Don't send termcap keypad init/deinit strings. + --no-histdups + Remove duplicates from command history. + --no-number-headers + Don't give line numbers to header lines. + --no-paste + Ignore pasted input. + --no-search-header-lines + Searches do not include header lines. + --no-search-header-columns + Searches do not include header columns. + --no-search-headers + Searches do not include header lines or columns. + --no-vbell + Disable the terminal's visual bell. + --redraw-on-quit + Redraw final screen when quitting. + --rscroll=[_C] + Set the character used to mark truncated lines. + --save-marks + Retain marks across invocations of less. + --search-options=[EFKNRW-] + Set default options for every search. + --show-preproc-errors + Display a message if preprocessor exits with an error status. + --proc-backspace + Process backspaces for bold/underline. + --PROC-BACKSPACE + Treat backspaces as control characters. + --proc-return + Delete carriage returns before newline. + --PROC-RETURN + Treat carriage returns as control characters. + --proc-tab + Expand tabs to spaces. + --PROC-TAB + Treat tabs as control characters. + --status-col-width=[_N] + Set the width of the -J status column to _N characters. + --status-line + Highlight or color the entire line containing a mark. + --use-backslash + Subsequent options use backslash as escape char. + --use-color + Enables colored text. + --wheel-lines=[_N] + Each click of the mouse wheel moves _N lines. + --wordwrap + Wrap lines at spaces. + + + --------------------------------------------------------------------------- + + LLIINNEE EEDDIITTIINNGG + + These keys can be used to edit text being entered + on the "command line" at the bottom of the screen. + + RightArrow ..................... ESC-l ... Move cursor right one character. + LeftArrow ...................... ESC-h ... Move cursor left one character. + ctrl-RightArrow ESC-RightArrow ESC-w ... Move cursor right one word. + ctrl-LeftArrow ESC-LeftArrow ESC-b ... Move cursor left one word. + HOME ........................... ESC-0 ... Move cursor to start of line. + END ............................ ESC-$ ... Move cursor to end of line. + BACKSPACE ................................ Delete char to left of cursor. + DELETE ......................... ESC-x ... Delete char under cursor. + ctrl-BACKSPACE ESC-BACKSPACE ........... Delete word to left of cursor. + ctrl-DELETE .... ESC-DELETE .... ESC-X ... Delete word under cursor. + ctrl-U ......... ESC (MS-DOS only) ....... Delete entire line. + UpArrow ........................ ESC-k ... Retrieve previous command line. + DownArrow ...................... ESC-j ... Retrieve next command line. + TAB ...................................... Complete filename & cycle. + SHIFT-TAB ...................... ESC-TAB Complete filename & reverse cycle. + ctrl-L ................................... Complete filename, list all. diff --git a/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/database/DatabaseSetup.java b/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/database/DatabaseSetup.java index a4217afd..6da6f1ca 100644 --- a/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/database/DatabaseSetup.java +++ b/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/database/DatabaseSetup.java @@ -263,7 +263,7 @@ FOREIGN KEY (`User_UUID_User`) CONSTRAINT `fk_CharityVanity_Charities1` FOREIGN KEY (`UUID_charity`) REFERENCES `apbaluna`.`Charities` (`UUID_charities`) - ON DELETE NO ACTION + ON DELETE CASCADE ON UPDATE CASCADE) ENGINE = InnoDB; """; diff --git a/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/models/Charity.java b/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/models/Charity.java index e019aead..3f4a8cdf 100644 --- a/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/models/Charity.java +++ b/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/models/Charity.java @@ -74,7 +74,8 @@ public Charity(String uuid, String org_number, Boolean is_pre_approved, String s */ public Charity( String org_number, String link, String name, boolean is_pre_approved, String status) { - this.UUID = java.util.UUID.randomUUID(); + UUID stableId = UUID.nameUUIDFromBytes((org_number + link + name).getBytes()); + this.UUID = stableId; this.org_number = org_number.replaceAll("\\s", ""); this.name = name; this.url = link; @@ -207,4 +208,9 @@ public void setLogoBlob(byte[] logoBlob) { public void setFeedbacks(ArrayList feedbacks) { this.feedbacks = feedbacks; } + + public void setUUIDFromString(String uuid){ + this.UUID = java.util.UUID.fromString(uuid); + } } + diff --git a/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/service/APIToDatabaseService.java b/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/service/APIToDatabaseService.java index 06820dc7..7c2a7fab 100644 --- a/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/service/APIToDatabaseService.java +++ b/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/service/APIToDatabaseService.java @@ -2,6 +2,7 @@ import java.sql.Connection; import java.sql.PreparedStatement; +import java.sql.ResultSet; import java.sql.SQLException; import java.util.List; import java.util.UUID; @@ -67,6 +68,7 @@ INSERT INTO CharityVanity (UUID_charity, charity_name, charity_link, description String uuid; if (charity.getUUID() == null) { uuid = UUID.randomUUID().toString(); + charity.setUUIDFromString(uuid); System.out.println("API object doesnt have UUID, assigning"); } else { uuid = charity.getUUID().toString(); @@ -76,7 +78,7 @@ INSERT INTO CharityVanity (UUID_charity, charity_name, charity_link, description ps1.setString(2, charity.getOrg_number().replaceAll("\\s", "")); ps1.setBoolean(3, charity.getPreApproved()); ps1.setString(4, charity.getStatus()); - ps1.addBatch(); + ps1.executeUpdate(); ps2.setString(1, uuid); ps2.setString(2, charity.getName()); @@ -85,11 +87,10 @@ INSERT INTO CharityVanity (UUID_charity, charity_name, charity_link, description ps2.setString(5, charity.getLogoURL()); ps2.setString(6, charity.getKeyValues()); ps2.setBytes(7, charity.getLogoBlob()); - ps2.addBatch(); + ps2.executeUpdate(); + } - ps1.executeBatch(); - ps2.executeBatch(); } catch (Exception e) { e.printStackTrace(); throw new RuntimeException(e);