From 5503971716a2970c4cadcda79ecb3d60a3fee47c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20Gulczy=C5=84ski?= Date: Wed, 17 Jan 2024 20:43:59 +0100 Subject: [PATCH] projekt 2 finished --- projekt_2/README.md | 7 +++++ projekt_2/init_db.sql | 1 + projekt_2/src/main/java/org/example/Main.java | 27 ++++++++++++------ .../src/main/java/org/example/MyQuery.java | 16 +++++++++-- .../src/main/java/org/example/Review.java | 19 +++++++++++- .../target/classes/org/example/Main.class | Bin 2841 -> 3291 bytes .../target/classes/org/example/MyQuery.class | Bin 5398 -> 6010 bytes .../target/classes/org/example/Review.class | Bin 2692 -> 3132 bytes 8 files changed, 58 insertions(+), 12 deletions(-) diff --git a/projekt_2/README.md b/projekt_2/README.md index e21b689..65aee68 100644 --- a/projekt_2/README.md +++ b/projekt_2/README.md @@ -1 +1,8 @@ # Projekt 2 + +## Jak Rozpocząć? +1. Pobierz repozytorium. +2. Przejdź do głównego katalogu repozytorium. +3. W terminalu wpisz `./start.sh`. +4. Zostanie utworzony kontener Docker z bazą danych PostgreSQL, która zostanie zainicjalizowana danymi z pliku `init_db.sql`. +5. Teraz można uruchomić plik `main.java`, który wykona operacje SELECT i INSERT na bazie danych. \ No newline at end of file diff --git a/projekt_2/init_db.sql b/projekt_2/init_db.sql index 15ea99c..0701348 100644 --- a/projekt_2/init_db.sql +++ b/projekt_2/init_db.sql @@ -139,6 +139,7 @@ CREATE TABLE IF NOT EXISTS reviews ( rating INT, review_text TEXT, author_name VARCHAR(100), + created_at TIMESTAMP WITH TIME ZONE, FOREIGN KEY (book_id) REFERENCES books(id) ); diff --git a/projekt_2/src/main/java/org/example/Main.java b/projekt_2/src/main/java/org/example/Main.java index 3687d75..d6bafba 100644 --- a/projekt_2/src/main/java/org/example/Main.java +++ b/projekt_2/src/main/java/org/example/Main.java @@ -5,9 +5,6 @@ import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.hibernate.cfg.Configuration; -import java.util.List; -import java.util.Scanner; - public class Main { public static void main(String[] args) { @@ -22,11 +19,11 @@ public class Main { MyQuery myQuery = new MyQuery(session); // here, replace "test" with the title of the book you want to query - String title1 = "test"; + String title1 = "1984"; myQuery.getBookByExactTitle(title1); // here, replace "test" with the title of the book you want to query - String title2 = "test"; + String title2 = "Pride and Prejudice"; myQuery.getBookDetailsWithAuthorByTitle(title2); // here, set the book id you want to query @@ -40,17 +37,29 @@ public class Main { try { tx = session.beginTransaction(); // create a book - Book book = MyQuery.createBook("test title 3"); + String bookTitle = "test book title"; + Book book = MyQuery.createBook(bookTitle); session.save(book); // create an Author - Author author = MyQuery.createAuthor("adam 3"); + String authorName = "Adam Gulczynski"; + Author author = MyQuery.createAuthor(authorName); session.save(author); // // create book details - BookDetails bookDetails = MyQuery.createBookDetails("333123123", 123, book, author); + + String isbn = "1234-0000332"; + int pageCount = 123; + BookDetails bookDetails = MyQuery.createBookDetails(isbn, pageCount, book, author); session.save(bookDetails); -// + + // create a book review + int rating = 5; + String reviewText = "Great book!"; + String reviewerName = "Adam"; + Review review = MyQuery.createReview(rating, reviewText, book, reviewerName); + session.save(review); + tx.commit(); } catch (Exception e) { if (tx != null) { diff --git a/projekt_2/src/main/java/org/example/MyQuery.java b/projekt_2/src/main/java/org/example/MyQuery.java index 362d264..37aeb3d 100644 --- a/projekt_2/src/main/java/org/example/MyQuery.java +++ b/projekt_2/src/main/java/org/example/MyQuery.java @@ -102,8 +102,6 @@ public class MyQuery { Book book = new Book(); book.setTitle(bookTitle); -// ZonedDateTime currentTimestamp = ZonedDateTime.now(); - return book; } @@ -122,5 +120,19 @@ public class MyQuery { bookDetails.setPageCount(pageCount); return bookDetails; } + + public static Review createReview(int rating, String reviewText, Book book, String authorName) { + Review review = new Review(); + review.setBook(book); + review.setRating(rating); + review.setReviewText(reviewText); + review.setAuthorName(authorName); + + ZonedDateTime currentTime = ZonedDateTime.now(); + review.setCreatedAt(currentTime); + + return review; + } + // ======================== END of INSERTing ================================= } diff --git a/projekt_2/src/main/java/org/example/Review.java b/projekt_2/src/main/java/org/example/Review.java index cb86518..d13592a 100644 --- a/projekt_2/src/main/java/org/example/Review.java +++ b/projekt_2/src/main/java/org/example/Review.java @@ -2,11 +2,13 @@ package org.example; import jakarta.persistence.*; +import java.time.ZonedDateTime; + @Entity @Table(name = "reviews") public class Review { -@Id + @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "review_id") private Long id; @@ -23,6 +25,9 @@ public class Review { @Column(name = "author_name") private String authorName; + @Column(name = "created_at", columnDefinition = "TIMESTAMP WITH TIME ZONE") + private ZonedDateTime createdAt; + public Review() { } @@ -66,6 +71,18 @@ public class Review { this.authorName = authorName; } + public ZonedDateTime getCreatedAt() { + if (createdAt == null) { + createdAt = ZonedDateTime.now(); + } + + return createdAt; + } + + public void setCreatedAt(ZonedDateTime createdAt) { + this.createdAt = createdAt; + } + @Override public String toString() { return "Review{" + diff --git a/projekt_2/target/classes/org/example/Main.class b/projekt_2/target/classes/org/example/Main.class index 5810a99caccfe08e3aa428f07b0036b062633e98..af241c16a7d8a641644ac8ebb2de3a73d4e0a441 100644 GIT binary patch delta 1594 zcmY*ZTW}Lq82(PO$!<2=G)a@-RxT-WDWeO`3cDOe&34NnYa(w2%^ zEYnbL|0$OE8?Zt~Lc>ZV?FLuM+o+)l&GtT5dmx2Y8TV^gjWq&M`*&~D{>hb^*CtS1 zw8o3^fqZ@>Ud$A;<%sJvtj7ks*1cLuVUvb-Y_|8fo91=Uebb;h8t`lbs%FM6xg<`yLZ?;U?#I>ZYa6CSjgmt+IsVap`wMq-LjIsR;D}{mzlIEk?Hf`uo>s9JqZ)F~(dsesEbcBcVqd{b zGsu|T?kQFI9Ig8tsRhDzP>$H&d*=F8bE3FEU)XMrTJ}}X!l;xPAIJ&##>^pWbABRM z6cF9^U!E21-hx@A00L^EtWTdc$xW?dSmg);-ij#@xl5;tI`$%OkA2L$(*D}}n{-mf zS^JEftjWX0)&obD4KK&1?Q3$Zxj@XZ00rY5wes47A|`10Z~zA#U%+ic!W=*}*!4ot)V4!Z5A6{ z=nro(s`RQEbQ*z#9{3OIF{*=yTZ4LaG^lHOUavC2}9UAh37ZB@F0pVAcmzqjf@YjR3*P4OGiYTUYj6$*zC;_o!dhHn$RDr)SFnZjH{uum z7yZine+?ZhBP0}T6#;a!gboo#r-;#>OM3z5rJR?OhSMZ}pmYxj3}ce1{iKn`AslA! zOp)U=9IHrY2cE@qtndUAl!#T6)_USc5hS@rJdb0n`y8u&fmoO%>+mA|YDje+Ug9c3 z!a*Fz%ZQSy#`0cew#E1sua)pR+p!+sF#Hr7I)(FigDWouJB>H-7Qa#_K4i+Hl(`4* z;~lPil6vuz}?#Jxj9q5)q?WMJ16eyH+3tK3?P_d;#i_of65NXvdrIfNjg%w+? zZvChqRncS;jStpXA2jj7@IpZwo0v$9?SpT9Fedm=eK6S=A57Xr@m#P;b8pU>^PhA6 zb7tm0Kf52Tb$u-Ubyg%c7Yz4D}lUehn)gEyur9x9_*4P!XDykKmH8mv6Zo595 z)NG;FKc^=V8Sonnwv+xaJ?* z)j~8dJ~}#_RU9xap>><~)1&G26CxAinattzz(|Y~eVQkHFf@=EpBz*iG`Y~aNIy?% zp5kfqNhn#?=g`f7=7^uS>cqtGShhPW&&sqQ^AHv z+-Zmks7fLw(OK^6wLB*=Po0J56gAG_d9j2Wo9BL;-lAP|?DllR)&IwP;-}r1tLNzO z3KDL?3hFxZ?6dfs)n3eX7I1vvF^j}Pj!L0^+@IU%1rrOD+zPc9k{&{{9CCw~YvxJ& zIUDvRW;uK-D)b6hhHl~I85Dh-=To_i^?b!8`uUC@xFWuoYb*-x`@HOYk?YGo&!4&F zK>+{wKA>D|oCvGsfQlr&Sg6(t>QW_|s^w1V*~kv=rj>g{eD~5JvprPG(p99{EIc(l zBlmMs^!~EwXPT{iC|W;HleD&t&uHWewo8M}(qb{WYqao-2z*h1UxoU*#D7Sf7yq~T z8}icp`@A5H9TTE4#^r`jQo#vXNXr6oCYYo^s5M!hmDzI6F~xIo&sDrGxu--r^*k@% zDbYx)XyG(3$a%Ffoa04ak{x$2NKQsk*+~y)q<2U5eu-Cjm4GxBT&504BR6@Cv*IKC zCFF02sEYZGH+f4mdQR}8M3-c%F~!>or6^IP6s3xHmj5ctQt}|hbT3KMt-;&#pi|Mm dL?NNuVZr=@{>TmNJyO^uV@DRAmgQ{T`wzlI-K78k diff --git a/projekt_2/target/classes/org/example/MyQuery.class b/projekt_2/target/classes/org/example/MyQuery.class index 7c54eb29e2452787bb50e0d82d484370a00e303c..f13ba52001f728fbf5fe2a408341da39a4a8e5eb 100644 GIT binary patch delta 1795 zcmZ`(X>e0j6#j0um%OG4MO4x&*Hzn0cu3(QQKt(8W1tbJ{pQMtnCj2m4#*1;{!jndp2#BI1)Akbl0 zD`HkW(JH-n1hEn43FJ$!Laj8qEg88hh`Y0qnv}IBXyfkJRD|r)eCz4$PMWtnR%=y2RsO<7k5PjGr5M=*zO@rv>8cSeK z=}}Q-7Yh`Y*2!_##2XDWF>qK*y2Psk?fMRJday|qaYhkXR(ifus4bRgt*p09jvZCl ztW@VDlb1#9QN1|rV4?y(Q^_Nsn>j_KS6u{V{Rf{zD(@0p(^pT_TXW9B>%4{-f z<872FxU6S+$}oEt*-L_v^jGW?Z!TV3Ed2O}Z)L@;Hp97oClG2jtXRCQqamB}1AS{_ ztwuvrGL^8Lyq^U8@s7rXbNhuEjU2IITBTnF!ZG!t4GBJ}llVJ#z^qpz=F0ymkf*@e zet%0%lsFFPA69Z?X|T99(i!&Qu#O2F(Ks7dRM_SDyIsO#Pvn<*g->9vEkbkc3qo`9 z{1EWsVcLHC@=(zko4L~=xM{=iUB}+c z%`v%Yl1VXczz#f34J0Qy{cOmXce96DyAB0`OiZ# z_2-y6u|bMan^wUQ2Bnbm;66eg0S$f)uL%BSMJ)jiNhifMC&k^xw;#o8WY`^t0b)0{FwI|{^C4*Zc zX-{DW8zP>H3~rBj7G`kg5bmk=Mm!O31`kF&Qwp8L;eaby_9~K0ljPNGbqz^gi}|&9&E=-IGDN?WjDV8FGi7Z{3_z`CX zMR5QTaYV#07Y@yxNv2NLCFOTs=mM||KiXWw zTKj-wn?;;!U+?Y|dSAl)ng;^*aK1m=FC6F=aK^&1;*fECERdKViUq^PWx3-cPgyGs z7KU;+M9NEI#@urON4PAn#5nbEA}egTKk5C6Jr;b?n>}-F z_$H99w|dg`-<}z64FWdoWYqPU-n2!vG$s*NMi1iPg%dvP;%OQzj4sq+H=ifl&nUj zo|Ohxe6WlnL&IVXsTwjzumnd~w%{m78;#ckqKxAj>w2xPg-VtuWd)^@9N4iG>y#2Z z&rPP1CR0hHsbt5P5?5esY%{G1+phK8NDX<8uY=W*}nf`PT-{SB5BGmDzHsm ztGpqQtVA+BO+z(iVXI=28wYOO4aFq0oAgY28&Ha*w*g3YD>>3|3%BX5 z6?a&-;4bd*xq@3gK+Js=AFB8W134@`QHN(LzEH7O#aAl!srW|4clb;y7cs;5itm{I E4`qhvApigX diff --git a/projekt_2/target/classes/org/example/Review.class b/projekt_2/target/classes/org/example/Review.class index 7c471ae9462e4272cc0abc093bb960a0094206b9..d2e2a1cf4a1fffee10055bcfeda6f095b5fdcae5 100644 GIT binary patch literal 3132 zcmai0+j7%Z6kR7VQQ{~U5(0z-a7zFuP)th;wB{C^KumL?u^Mh|Q^h_wBDUm8a!RJt z|L8~bq0Epe!$V&?(~s(O9Z4j@Qs{#v?Q`~Cd!2nd{^#Gfe*u_ItTLRtr>9s!eqEACsM?Z9d5y!0;+_vP; z0$o;(K#TiGi;i6{D$79~Ll_pwY&gyqtrz3wcexg5jp!J~5ju8F-?HlhqO6RM>Ntku z0$DfkW5|~zHxhGG@m;D15GQm@1iEJ1-*nt%vndtCNgbzfTA;7$O4FCMSt5*w2)@;n zg{O`!YjfN&C>68#2p?-WqhktZ1&##=O6oB%w!>pji8w;k_t_qy@BX zv(c6-&jrrqV`mDJP>hg+yhO(wVg5eRaR~)dYnofKehW}OJ-cw)>I^@*6aC7uJ8Ph1^pR2t-zu@H@|F@jVA(=sXj_hqusQLov~RGEQGL@ z)>XxxPPJGv?H$8eu@!tSRpWtU*?YK}s_X!+KZ5pyIvuVCp6BFq)l6he3da0nL!dt_ z(e;o}Hmb~ZlcjmwC@;-djM=4!xkqJVA*aOL)0O3U8kd|J`425xwp?yEH>7Kr%s|jn zRkN{Xx|Wio#f-mcF(pUd>$k97d8|Wq>6aORk#_|glvz+L-1NfD(L^Clud!-rs`{4L zG){Cg6=)tRjOCO23Zjn?t5KtK!j!o}n|CXjd|4?CD5Y52D{uSrC8}epDa)7|eI~Tt z!OiYXhR`l9>vUJz9}xo;->hyenXM?CI^D#!CnGP((NI**dVMD($kA1C+HO_evs9+~ zL#CG$!-MK|p6%uDFh>)qr5EtwuI2`ZW{QUyY+v-gdTRAv|F?g6^4B-*MTs zzs18JDTcHbOuN>Q-qa$gv|GhwmSQXK83v6W+l*5GEVh&~G9!qR*=STOU$wGcwmEG| z4b$_ar-AKwHgTpjsv24Xr#`I8n=3pQ?~h(yuRsrERZ?dG$rR{lRX4eVZG+ z{E}vOl-Vo>xx>EzeBPytD|`#S56%1u@hb3H;#2)w06{XyVUAzwNL0c+?(r>f9}9dc zfCAqkz-wrKaG?tdK;Z*tQjN=a5E-jO1aX_WunVoz{dqdf2M9+)t;oGX52GybH5MbR zIFW%)A{SDLEMYl~$UrBN0*PEcfJm4|ffYPVA#(Wlj)+`ICGrhc6GSFwh#V zz^8$(P@VJ)-=zg?vXf_pJdFc*hTSUg{a(P-sT9wXWTx>q@CN7jI?Ue~f8%d)5$Fu$ u;~3ME5z`EQAWRq5gMp+5&5x8#f^&{+ph}^a!gKy=Xi&=Xs|g1`Vf;VCv!AR0 delta 1048 zcmZ`&+fGwK6kSs|J>}4XNL#4df}mVZxhPdsE>((J1-x*--%Nb-tHSKB$nlWtI)LSU=8awHWXx2PKN)A9ob^LVoy%k zxw3^28WDv+4+XBF4!xZFnD@Vji!25h4wf)PTr;kCxMpU<#N9EQcbT>#&V>-#(C&d0 zcz`QBJ%U^b_ZVNV>^AD%tD5}2HeeylwNaUgB(o35~$;St6-3yfnz z<98#;vcjv=Kqe47iM+ycKTlT08+Nltu)i@1p{mwJ{%*~XG$>C^v70stJjN4`YnZe4 zRCd23c2MCmPI>~JOra3uB<6SG(n+?46LS#)(|BsQWT_$ETkXM6pz&xtY!e8+ios8FTVqTTNY@m~r z-$_2u$y~*W{O!aq^`JoI=^D!B#R|NtC>M!Vx1MGXY<2O+xWTDKwS*&ef-b=CsCday sT0g2h__AN?H}gh+KJ}^IGM^_q|I7jwnM9bZa4cbqnZsxsyVytS0=}18aR2}S