[html4strict] Itnetwork_kurz

Viewer

copydownloadembedprintName: Itnetwork_kurz
  1. # Itnetwork_kurz
  2. -----------
  3.  
  4. ## Zadani: Evidence pojištění - Plná verze
  5.  
  6. Když zvládneš vytvořit aplikaci podle tohoto zadání, výrazně si zvýšíš svoji úspěšnost na pohovorech a hledání zaměstnání ti pak zabere jen zlomek času.
  7.  
  8. Naprogramuj webovou aplikaci pro evidenci pojistných událostí.
  9. Minimální požadavky ke splnění
  10.  
  11. Aplikace obsahuje kompletní správu (CRUD) pojištěných (např. "Jan Novák") a jejich pojištění (např. "pojištění bytu"):
  12.  
  13. - Vytvoření pojištěného
  14. - Vytvoření pojištění
  15. - Zobrazení detailu pojištěného včetně jeho pojištění
  16. - Zobrazení detailu pojištění
  17. - Zobrazení seznamu pojištěných
  18. - Odstranění pojištěného včetně všech jeho pojištění
  19. - Odstranění pojištění
  20. - Editace pojištěného
  21. - Editace pojištění pojištěného
  22.  
  23. Dané entity jsou uloženy v SQL databázi
  24.  
  25. Aplikace je naprogramována podle dobrých praktik a je plně responzivní
  26.  
  27. ## Doporučené rozšíření:
  28.  
  29. Aplikace podporuje uživatelské role (pojištěný, administrátor), navrhni a implementuj, kdo vidí a může editovat jaká data
  30.  
  31. Aplikace eviduje pojistné události pojištěných, rovněž pomocí kompletní správy (CRUD)
  32.  
  33. ## Expertní rozšíření:
  34.  
  35. Aplikace podporuje rozlišení pojistníků (těch, kdo platí pojištění) a pojištěných (těch, na koho se pojištění vztahuje). Místo zavedení 2 databázových tabulek se zamysli nad řešením přes výčtový typ (enum).
  36.     
  37. Aplikace generuje statistiky ve formě reportů
  38.   
  39.  
  40. -------------
  41. -------------
  42.  
  43. # Výstup -> insurance-app
  44.  
  45. -------------
  46. -------------
  47.  
  48. Webová aplikace pro evidenci pojistných událostí. Tento projekt je implementován pomocí Spring Boot a poskytuje kompletní správu pojištěnců a jejich pojištění.
  49.  
  50. ## Funkcionalita
  51.  
  52. - Vytvoření pojištěnce
  53. - Vytvoření pojištění
  54. - Zobrazení detailu pojištěnce včetně jeho pojištění
  55. - Zobrazení detailu pojištění
  56. - Zobrazení seznamu pojištěnců
  57. - Odstranění pojištěnce včetně všech jeho pojištění
  58. - Odstranění pojištění
  59. - Editace pojištěnce
  60. - Editace pojištění pojištěnce
  61.  
  62. ## Technologie
  63.  
  64. - Java
  65. - Spring Boot
  66. - Thymeleaf
  67. - JPA/Hibernate
  68. - MySQL
  69.  
  70. ## Struktura projektu
  71.  
  72. ### Hlavní třída aplikace
  73.  
  74. - [InsuranceAppApplication.java](https://github.com/bedjan/itnetwork_kurz/blob/main/insurance-app/src/main/java/com/example/insurance/InsuranceAppApplication.java)
  75.  
  76. ```
  77. package com.example.insurance;
  78.  
  79. import org.springframework.boot.SpringApplication;
  80.  
  81. import org.springframework.boot.autoconfigure.SpringBootApplication;
  82.  
  83. @SpringBootApplication
  84.  
  85. public class InsuranceAppApplication {
  86.  
  87. public static void main(String\[\] args) {
  88.  
  89. SpringApplication.run(InsuranceAppApplication.class, args);
  90.  
  91. }
  92.  
  93. }
  94.  
  95. ```
  96.  
  97. ### Kontroler
  98.  
  99. - [PoistenciController.java](https://github.com/bedjan/itnetwork_kurz/blob/main/insurance-app/src/main/java/com/example/insurance/PoistenciController.java)
  100.  
  101. ```
  102. package com.example.insurance;
  103.  
  104. import org.springframework.beans.factory.annotation.Autowired;
  105.  
  106. import org.springframework.stereotype.Controller;
  107.  
  108. import org.springframework.ui.Model;
  109.  
  110. import org.springframework.web.bind.annotation.\*;
  111.  
  112. import java.util.List;
  113.  
  114. @Controller
  115.  
  116. public class PoistenciController {
  117.  
  118. @Autowired
  119.  
  120. private PoistenecRepository repository;
  121.  
  122. @GetMapping("/poistenci")
  123.  
  124. public String listPoistenci(Model model) {
  125.  
  126. List<Poistenec> poistenci = repository.findAll();
  127.  
  128. model.addAttribute("poistenci", poistenci);
  129.  
  130. return "poistenci";
  131.  
  132. }
  133.  
  134. @GetMapping("/poistenci/new")
  135.  
  136. public String showNewPoistenecForm(Model model) {
  137.  
  138. model.addAttribute("poistenec", new Poistenec());
  139.  
  140. return "new_poistenec";
  141.  
  142. }
  143.  
  144. @PostMapping("/poistenci")
  145.  
  146. public String savePoistenec(@ModelAttribute("poistenec") Poistenec poistenec) {
  147.  
  148. repository.save(poistenec);
  149.  
  150. return "redirect:/poistenci";
  151.  
  152. }
  153.  
  154. @GetMapping("/poistenci/edit/{id}")
  155.  
  156. public String showEditPoistenecForm(@PathVariable Long id, Model model) {
  157.  
  158. Poistenec poistenec = repository.findById(id).orElseThrow(() -> new IllegalArgumentException("Invalid poistenec Id:" + id));
  159.  
  160. model.addAttribute("poistenec", poistenec);
  161.  
  162. return "edit_poistenec";
  163.  
  164. }
  165.  
  166. @PostMapping("/poistenci/{id}")
  167.  
  168. public String updatePoistenec(@PathVariable Long id, @ModelAttribute("poistenec") Poistenec poistenec) {
  169.  
  170. Poistenec existingPoistenec = repository.findById(id).orElseThrow(() -> new IllegalArgumentException("Invalid poistenec Id:" + id));
  171.  
  172. existingPoistenec.setJmeno(poistenec.getJmeno());
  173.  
  174. existingPoistenec.setPrijmeni(poistenec.getPrijmeni());
  175.  
  176. repository.save(existingPoistenec);
  177.  
  178. return "redirect:/poistenci";
  179.  
  180. }
  181.  
  182. @GetMapping("/poistenci/delete/{id}")
  183.  
  184. public String deletePoistenec(@PathVariable Long id) {
  185.  
  186. Poistenec poistenec = repository.findById(id).orElseThrow(() -> new IllegalArgumentException("Invalid poistenec Id:" + id));
  187.  
  188. repository.delete(poistenec);
  189.  
  190. return "redirect:/poistenci";
  191.  
  192. }
  193.  
  194. }
  195.  
  196. ```
  197.  
  198. ### Model
  199.  
  200. - [Poistenec.java](https://github.com/bedjan/itnetwork_kurz/blob/main/insurance-app/src/main/java/com/example/insurance/Poistenec.java)
  201.  
  202.  
  203. ```
  204. package com.example.insurance;
  205.  
  206. import javax.persistence.Entity;
  207.  
  208. import javax.persistence.GeneratedValue;
  209.  
  210. import javax.persistence.GenerationType;
  211.  
  212. import javax.persistence.Id;
  213.  
  214. @Entity
  215.  
  216. public class Poistenec {
  217.  
  218. @Id
  219.  
  220. @GeneratedValue(strategy = GenerationType.IDENTITY)
  221.  
  222. private Long id;
  223.  
  224. private String jmeno;
  225.  
  226. private String prijmeni;
  227.  
  228. // Konstruktory, gettery a settery
  229.  
  230. public Poistenec() {}
  231.  
  232. public Poistenec(String jmeno, String prijmeni) {
  233.  
  234. this.jmeno = jmeno;
  235.  
  236. this.prijmeni = prijmeni;
  237.  
  238. }
  239.  
  240. public Long getId() {
  241.  
  242. return id;
  243.  
  244. }
  245.  
  246. public void setId(Long id) {
  247.  
  248. this.id = id;
  249.  
  250. }
  251.  
  252. public String getJmeno() {
  253.  
  254. return jmeno;
  255.  
  256. }
  257.  
  258. public void setJmeno(String jmeno) {
  259.  
  260. this.jmeno = jmeno;
  261.  
  262. }
  263.  
  264. public String getPrijmeni() {
  265.  
  266. return prijmeni;
  267.  
  268. }
  269.  
  270. public void setPrijmeni(String prijmeni) {
  271.  
  272. this.prijmeni = prijmeni;
  273.  
  274. }
  275.  
  276. }
  277.  
  278. ```
  279.  
  280. ### Repository
  281.  
  282. - [PoistenecRepository.java](https://github.com/bedjan/itnetwork_kurz/blob/main/insurance-app/src/main/java/com/example/insurance/PoistenecRepository.java)
  283.  
  284.  
  285. ```
  286. package com.example.insurance;
  287.  
  288. import org.springframework.data.jpa.repository.JpaRepository;
  289.  
  290. public interface PoistenecRepository extends JpaRepository<Poistenec, Long> {
  291.  
  292. }
  293.  
  294. ```
  295.  
  296. ### Thymeleaf šablony
  297.  
  298. #### Seznam pojištěnců
  299.  
  300. - [poistenci.html](https://github.com/bedjan/itnetwork_kurz/blob/main/insurance-app/src/main/resources/templates/poistenci.html)
  301.  
  302.  
  303. ```
  304. <!DOCTYPE html>
  305.  
  306. <html xmlns:th="<http://www.thymeleaf.org>">
  307.  
  308. <head>
  309.  
  310. <title>Seznam Pojištěnců</title>
  311.  
  312. </head>
  313.  
  314. <body>
  315.  
  316. <h1>Seznam Pojištěnců</h1>
  317.  
  318. <a th:href="@{/poistenci/new}">Přidat Pojištěnce</a>
  319.  
  320. <table>
  321.  
  322. <thead>
  323.  
  324. <tr>
  325.  
  326. <th>Jméno</th>
  327.  
  328. <th>Příjmení</th>
  329.  
  330. <th>Akce</th>
  331.  
  332. </tr>
  333.  
  334. </thead>
  335.  
  336. <tbody>
  337.  
  338. <tr th:each="poistenec : ${poistenci}">
  339.  
  340. <td th:text="${poistenec.jmeno}"></td>
  341.  
  342. <td th:text="${poistenec.prijmeni}"></td>
  343.  
  344. <td>
  345.  
  346. <a th:href="@{/poistenci/edit/{id}(id=${poistenec.id})}">Upravit</a>
  347.  
  348. <a th:href="@{/poistenci/delete/{id}(id=${poistenec.id})}">Smazat</a>
  349.  
  350. </td>
  351.  
  352. </tr>
  353.  
  354. </tbody>
  355.  
  356. </table>
  357.  
  358. </body>
  359.  
  360. </html>
  361.  
  362. ```
  363.  
  364. #### Přidání pojištěnce
  365.  
  366. - [new_poistenec.html](https://github.com/bedjan/itnetwork_kurz/blob/main/insurance-app/src/main/resources/templates/new_poistenec.html)
  367.  
  368.  
  369. ```
  370. <!DOCTYPE html>
  371.  
  372. <html xmlns:th="<http://www.thymeleaf.org>">
  373.  
  374. <head>
  375.  
  376. <title>Přidat Pojištěnce</title>
  377.  
  378. </head>
  379.  
  380. <body>
  381.  
  382. <h1>Přidat Pojištěnce</h1>
  383.  
  384. <form th:action="@{/poistenci}" th:object="${poistenec}" method="post">
  385.  
  386. <label for="jmeno">Jméno:</label>
  387.  
  388. <input type="text" id="jmeno" th:field="\*{jmeno}">
  389.  
  390. <label for="prijmeni">Příjmení:</label>
  391.  
  392. <input type="text" id="prijmeni" th:field="\*{prijmeni}">
  393.  
  394. <button type="submit">Uložit</button>
  395.  
  396. </form>
  397.  
  398. </body>
  399.  
  400. </html>
  401.  
  402. ```
  403.  
  404.  
  405. #### Úprava pojištěnce
  406.  
  407. - [edit_poistenec.html](https://github.com/bedjan/itnetwork_kurz/blob/main/insurance-app/src/main/resources/templates/edit_poistenec.html)
  408.  
  409.  
  410. ```
  411. <!DOCTYPE html>
  412.  
  413. <html xmlns:th="<http://www.thymeleaf.org>">
  414.  
  415. <head>
  416.  
  417. <title>Upravit Pojištěnce</title>
  418.  
  419. </head>
  420.  
  421. <body>
  422.  
  423. <h1>Upravit Pojištěnce</h1>
  424.  
  425. <form th:action="@{/poistenci/{id}(id=${poistenec.id})}" th:object="${poistenec}" method="post">
  426.  
  427. <label for="jmeno">Jméno:</label>
  428.  
  429. <input type="text" id="jmeno" th:field="\*{jmeno}">
  430.  
  431. <label for="prijmeni">Příjmení:</label>
  432.  
  433. <input type="text" id="prijmeni" th:field="\*{prijmeni}">
  434.  
  435. <button type="submit">Uložit</button>
  436.  
  437. </form>
  438.  
  439. </body>
  440.  
  441. </html>
  442.  
  443. ```
  444.  
  445.  
  446. ### Konfigurace
  447.  
  448. - [application.properties](https://github.com/bedjan/itnetwork_kurz/blob/main/insurance-app/src/main/resources/application.properties)
  449.  
  450.  
  451. ```
  452. spring.datasource.url=jdbc:mysql://localhost:3306/insurance_db
  453.  
  454. spring.datasource.username=insurance_user
  455.  
  456. spring.datasource.password=password
  457.  
  458. spring.jpa.hibernate.ddl-auto=update
  459.  
  460. spring.jpa.show-sql=true
  461.  
  462. spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
  463.  
  464. ```
  465.  
  466. ### Testovací třída
  467.  
  468. - [AppTest.java](https://github.com/bedjan/itnetwork_kurz/blob/main/insurance-app/src/test/java/com/example/insurance/AppTest.java)
  469.  
  470.  
  471. ```
  472. package com.example.insurance;
  473.  
  474. import org.junit.jupiter.api.Test;
  475.  
  476. import static org.junit.jupiter.api.Assertions.assertTrue;
  477.  
  478. public class AppTest {
  479.  
  480. @Test
  481.  
  482. public void testApp() {
  483.  
  484. assertTrue(true);
  485.  
  486. }
  487.  
  488. }
  489.  
  490. ```
  491.  
  492. ### Pom.xml
  493.  
  494. - [pom.xml](https://github.com/bedjan/itnetwork_kurz/blob/main/insurance-app/pom.xml)
  495.  
  496.  
  497. ```
  498. <project xmlns="<http://maven.apache.org/POM/4.0.0>"
  499.  
  500. xmlns:xsi="<http://www.w3.org/2001/XMLSchema-instance>"
  501.  
  502. xsi:schemaLocation="<http://maven.apache.org/POM/4.0.0> <http://www.apache.org/xsd/maven-4.0.0.xsd">>
  503.  
  504. <modelVersion>4.0.0</modelVersion>
  505.  
  506. <groupId>com.example</groupId>
  507.  
  508. <artifactId>insurance-app</artifactId>
  509.  
  510. <version>1.0-SNAPSHOT</version>
  511.  
  512. <packaging>jar</packaging>
  513.  
  514. <name>insurance-app</name>
  515.  
  516. <description>Insurance Management Application</description>
  517.  
  518. <parent>
  519.  
  520. <groupId>org.springframework.boot</groupId>
  521.  
  522. <artifactId>spring-boot-starter-parent</artifactId>
  523.  
  524. <version>2.5.6</version>
  525.  
  526. <relativePath/> <!-- lookup parent from repository -->
  527.  
  528. </parent>
  529.  
  530. <properties>
  531.  
  532. <java.version>11</java.version>
  533.  
  534. </properties>
  535.  
  536. <dependencies>
  537.  
  538. <dependency>
  539.  
  540. <groupId>org.springframework.boot</groupId>
  541.  
  542. <artifactId>spring-boot-starter-web</artifactId>
  543.  
  544. </dependency>
  545.  
  546. <dependency>
  547.  
  548. <groupId>org.springframework.boot</groupId>
  549.  
  550. <artifactId>spring-boot-starter-data-jpa</artifactId>
  551.  
  552. </dependency>
  553.  
  554. <dependency>
  555.  
  556. <groupId>mysql</groupId>
  557.  
  558. <artifactId>mysql-connector-java</artifactId>
  559.  
  560. </dependency>
  561.  
  562. <dependency>
  563.  
  564. <groupId>org.springframework.boot</groupId>
  565.  
  566. <artifactId>spring-boot-starter-thymeleaf</artifactId>
  567.  
  568. </dependency>
  569.  
  570. <dependency>
  571.  
  572. <groupId>org.springframework.boot</groupId>
  573.  
  574. <artifactId>spring-boot-starter-test</artifactId>
  575.  
  576. <scope>test</scope>
  577.  
  578. </dependency>
  579.  
  580. </dependencies>
  581.  
  582. <build>
  583.  
  584. <plugins>
  585.  
  586. <plugin>
  587.  
  588. <groupId>org.springframework.boot</groupId>
  589.  
  590. <artifactId>spring-boot-maven-plugin</artifactId>
  591.  
  592. <version>2.5.6</version>
  593.  
  594. <executions>
  595.  
  596. <execution>
  597.  
  598. <goals>
  599.  
  600. <goal>repackage</goal>
  601.  
  602. </goals>
  603.  
  604. </execution>
  605.  
  606. </executions>
  607.  
  608. </plugin>
  609.  
  610. </plugins>
  611.  
  612. </build>
  613.  
  614. </project>
  615.  
  616. ```
  617.  
  618. -------------
  619.  
  620. # Navod pro [MX Linux 23 - Libretto](https://mxlinux.org/blog/mx-23-libretto-now-available/)
  621.  
  622. -----------
  623.  
  624. ## Update repozitaru Debian 
  625.  
  626. ```sudo apt update```
  627.  
  628. ## Instalace OpenJdk Javy
  629.  
  630. ```sudo apt install openjdk```
  631.  
  632. ## Overeni java verze
  633.  
  634. ```java -version``` 
  635.  
  636. ## Instalace Mavenu 
  637.  
  638. ```sudo apt install maven```
  639.  
  640. ## Instalace Webserveru Apache
  641.  
  642. ```sudo apt install apache2```
  643.  
  644. ## Start apache
  645.  
  646. ```sudo service apache2 start```
  647.  
  648. ## Update startu Apache
  649.  
  650. ```update-rc.d apache2 defaults```
  651.  
  652. ## pracovni adresar apache je v
  653.  
  654. ```ls /var/www/html/``` 
  655.  
  656. ## Instalace PHP a modulu
  657.  
  658. ```sudo apt install libapache2-mod-php7.0```
  659.  
  660. ```a2enmod php7.0```
  661.  
  662.  
  663. ## PHP informace 
  664.  
  665. ```php -i```
  666.  
  667. ## Instalace Mysql, resp. Mariadb heslo itnetwork
  668.  
  669. ```sudo apt install mariadb-server```
  670.  
  671. ```sudo service mysql start```
  672.  
  673. ```sudo update-rc.d mysql defaults```
  674.  
  675. ```sudo service mysql restart```
  676.  
  677. ```sudo service mysql stop```
  678.  
  679. ```sudo mysql_secure_installation```
  680.  
  681. ## Pro zmenu hesla do mysql
  682.  
  683. #mysqladmin -u root password
  684.  
  685. ## Prihlaseni do mysql
  686.  
  687. #mysql -u root -p
  688. #exit
  689.  
  690. ## Instalace Git 
  691.  
  692.  
  693. ```sudo apt install git```
  694.  
  695. ## Instalace npm
  696.  
  697.  
  698. ```sudo apt install nodejs npm```
  699.  
  700.  
  701. # Vytvoření nového Spring Boot projektu
  702.  
  703.  
  704. ```sudo mvn archetype:generate -DgroupId=com.example.insurance -DartifactId=insurance-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false```
  705.  
  706.  
  707. ## Presunuti do slozky insurance-app
  708.  
  709.  
  710. ```cd insurance-app```
  711.  
  712. ## Nastavení MySQL databáze: Vytvořte databázi a uživatele:
  713.  
  714.        
  715. ```sudo sql```
  716.  
  717.  
  718. ```
  719. CREATE DATABASE insurance_db;
  720. CREATE USER 'insurance_user'@'localhost' IDENTIFIED BY 'password';
  721. GRANT ALL PRIVILEGES ON insurance_db.* TO 'insurance_user'@'localhost';
  722. FLUSH PRIVILEGES;
  723. ```
  724.  
  725.  
  726. # Spuštění aplikace
  727.  
  728. ## Spuštění Spring Boot aplikace:
  729.  
  730. #mvn clean install
  731.  
  732. ```mvn spring-boot:run```
  733.  
  734. ## Otevřete webový prohlížeč a přejděte na:
  735.  
  736. ```firefox http://localhost:8080/poistenci```
  737.  
  738.  

Editor

You can edit this paste and save as new:


File Description
  • Itnetwork_kurz
  • Paste Code
  • 06 Jul-2024
  • 14.39 Kb
You can Share it: