# Реалізація інформаційного та програмного забезпечення

# SQL-скрипт для створення на початкового наповнення бази даних

-- MySQL Script generated by MySQL Workbench -- Thu May 25 17:59:40 2023 -- Model: New Model Version: 1.0 -- MySQL Workbench Forward Engineering

SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0; SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0; SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES, NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';


-- Schema mydb


DROP SCHEMA IF EXISTS mydb ;


-- Schema mydb


CREATE SCHEMA IF NOT EXISTS mydb DEFAULT CHARACTER SET utf8 ; USE mydb ;


-- Table mydb.user


DROP TABLE IF EXISTS mydb.user ;

CREATE TABLE IF NOT EXISTS mydb.user ( id INT NOT NULL AUTO_INCREMENT, email VARCHAR(255) NOT NULL, password VARCHAR(255) NOT NULL, fullname VARCHAR(255) NULL, PRIMARY KEY (id), UNIQUE INDEX id_UNIQUE (id ASC) VISIBLE, UNIQUE INDEX email_UNIQUE (email ASC) VISIBLE) ENGINE = InnoDB;


-- Table mydb.quiz


DROP TABLE IF EXISTS mydb.quiz ;

CREATE TABLE IF NOT EXISTS mydb.quiz ( id INT NOT NULL AUTO_INCREMENT, text VARCHAR(255) NOT NULL, topic VARCHAR(255) NOT NULL, creation_date DATETIME NOT NULL, creator_id INT NOT NULL, PRIMARY KEY (id, creator_id), INDEX fk_quiz_user_idx (creator_id ASC) VISIBLE, UNIQUE INDEX id_UNIQUE (id ASC) VISIBLE, CONSTRAINT fk_quiz_user FOREIGN KEY (creator_id) REFERENCES mydb.user (id) ON DELETE NO ACTION ON UPDATE NO ACTION) ENGINE = InnoDB;


-- Table mydb.question


DROP TABLE IF EXISTS mydb.question ;

CREATE TABLE IF NOT EXISTS mydb.question ( id INT NOT NULL AUTO_INCREMENT, text VARCHAR(255) NOT NULL, option_type VARCHAR(255) NOT NULL, quiz_id INT NOT NULL, PRIMARY KEY (id, quiz_id), UNIQUE INDEX id_UNIQUE (id ASC) VISIBLE, INDEX fk_question_quiz1_idx (quiz_id ASC) VISIBLE, CONSTRAINT fk_question_quiz1 FOREIGN KEY (quiz_id) REFERENCES mydb.quiz (id) ON DELETE NO ACTION ON UPDATE NO ACTION) ENGINE = InnoDB;


-- Table mydb.option


DROP TABLE IF EXISTS mydb.option ;

CREATE TABLE IF NOT EXISTS mydb.option ( id INT NOT NULL AUTO_INCREMENT, text VARCHAR(255) NOT NULL, question_id INT NOT NULL, PRIMARY KEY (id), UNIQUE INDEX id_UNIQUE (id ASC) VISIBLE, INDEX fk_option_question1_idx (question_id ASC) VISIBLE, CONSTRAINT fk_option_question1 FOREIGN KEY (question_id) REFERENCES mydb.question (id) ON DELETE NO ACTION ON UPDATE NO ACTION) ENGINE = InnoDB;


-- Table mydb.choosen_option


DROP TABLE IF EXISTS mydb.choosen_option ;

CREATE TABLE IF NOT EXISTS mydb.choosen_option ( option_id INT NOT NULL, question_id INT NOT NULL, quiz_id INT NOT NULL, user_id INT NOT NULL, INDEX fk_choosen_option_option1_idx (option_id ASC) VISIBLE, INDEX fk_choosen_option_question1_idx (question_id ASC) VISIBLE, INDEX fk_choosen_option_quiz1_idx (quiz_id ASC) VISIBLE, INDEX fk_choosen_option_user1_idx (user_id ASC) VISIBLE, CONSTRAINT fk_choosen_option_option1 FOREIGN KEY (option_id) REFERENCES mydb.option (id) ON DELETE NO ACTION ON UPDATE NO ACTION, CONSTRAINT fk_choosen_option_question1 FOREIGN KEY (question_id) REFERENCES mydb.question (id) ON DELETE NO ACTION ON UPDATE NO ACTION, CONSTRAINT fk_choosen_option_quiz1 FOREIGN KEY (quiz_id) REFERENCES mydb.quiz (id) ON DELETE NO ACTION ON UPDATE NO ACTION, CONSTRAINT fk_choosen_option_user1 FOREIGN KEY (user_id) REFERENCES mydb.user (id) ON DELETE NO ACTION ON UPDATE NO ACTION) ENGINE = InnoDB;


-- Table mydb.answer


DROP TABLE IF EXISTS mydb.answer ;

CREATE TABLE IF NOT EXISTS mydb.answer ( option_id INT NOT NULL, question_id INT NOT NULL, quiz_id INT NOT NULL, INDEX fk_answer_option1_idx (option_id ASC) VISIBLE, INDEX fk_answer_question1_idx (question_id ASC) VISIBLE, INDEX fk_answer_quiz1_idx (quiz_id ASC) VISIBLE, CONSTRAINT fk_answer_option1 FOREIGN KEY (option_id) REFERENCES mydb.option (id) ON DELETE NO ACTION ON UPDATE NO ACTION, CONSTRAINT fk_answer_question1 FOREIGN KEY (question_id) REFERENCES mydb.question (id) ON DELETE NO ACTION ON UPDATE NO ACTION, CONSTRAINT fk_answer_quiz1 FOREIGN KEY (quiz_id) REFERENCES mydb.quiz (id) ON DELETE NO ACTION ON UPDATE NO ACTION) ENGINE = InnoDB;

SET SQL_MODE=@OLD_SQL_MODE; SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS; SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;

# RESTfull сервіс для управління даними

# Entity User.java

package ua.master.survey.api.entity;

import jakarta.persistence.*;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

@Entity
@Table(name = "user")
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;
    @Column(name = "email")
    private String email;
    @Column(name = "password")
    private String password;
    @Column(name = "fullname")
    private String fullname;
}

# Repository UserRepository.java

package ua.master.survey.api.repository;

import org.springframework.data.jpa.repository.JpaRepository;
import ua.master.survey.api.entity.User;

public interface UserRepository extends JpaRepository<User, Integer> {
}

# Service UserService.java

package ua.master.survey.api.service;

import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import ua.master.survey.api.entity.User;
import ua.master.survey.api.repository.UserRepository;

import java.util.List;
import java.util.Optional;

@Service
@RequiredArgsConstructor
public class UserService {
    private final UserRepository userRepository;

    public List<User> getAllUsers() {
        return userRepository.findAll();
    }

    public void saveUser(User user) {
        userRepository.save(user);
    }

    public User getUser(int id) {
        User user = null;
        Optional<User> optional = userRepository.findById(id);
        if (optional.isPresent()) {
            user = optional.get();
        }
        return user;
    }

    public void deleteUser(int id) {
        userRepository.deleteById(id);
    }
}

# Controller RestController.java

package ua.master.survey.api.controller;

import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;
import ua.master.survey.api.entity.User;
import ua.master.survey.api.service.UserService;

import java.util.List;

@org.springframework.web.bind.annotation.RestController
@RequestMapping("/api")
@RequiredArgsConstructor
public class RestController {
    private final UserService userService;

    @GetMapping("/users")
    public List<User> getAllUsers() {
        return userService.getAllUsers();
    }

    @GetMapping("/users/{id}")
    public User getUserById(@PathVariable int id) {
        return userService.getUser(id);
    }

    @PostMapping("/users")
    public String addNewUser(@RequestBody User user) {
        userService.saveUser(user);
        return "User was added successfully!";
    }

    @PutMapping("/users")
    public String updateUser(@RequestBody User user) {
        userService.saveUser(user);
        return "User was updated successfully!";
    }

    @DeleteMapping("/users/{id}")
    public String deleteUser(@PathVariable int id) {
        userService.deleteUser(id);
        return "User with ID = " + id + " was deleted!";
    }
}

# Starter JavaApiApplication.java

package ua.master.survey.api;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class JavaApiApplication {

    public static void main(String[] args) {
        SpringApplication.run(JavaApiApplication.class, args);
    }

}
Останнє оновлення: 5/25/2023, 7:14:20 PM