Student

Saturday, February 1, 2025

 Main

package com.example.quiz1practice;

import org.springframework.boot.ApplicationRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;

import com.example.quiz1practice.model.Student;
import com.example.quiz1practice.model.StudentRepository;

@SpringBootApplication
public class Quiz1practiceApplication {

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

    @Bean
    ApplicationRunner init(StudentRepository repository){
        return args -> {
            repository.save(new Student("John Doe","johndoe@gmail.com","CSIS"));
            repository.save(new Student("Jane Doe","janedoe@gmail.com","Accounting"));
            repository.findAll().forEach(System.out::println);
        };
    }
}

Model / Student

src/main/java/com/example/crs/model/

package com.example.quiz1practice.model;

import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.Table;

@Entity
@Table(name="student")
public class Student {
   
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer id;

    @Column(name="name")
    private String name;

    @Column(name="email")
    private String email;

    @Column(name="department")
    private String department;

    public Student() {

    }

    public Student(String name, String email, String department){
        this.name = name;
        this.email = email;
        this.department = department;
    }

    public Integer getId(){
        return id;
    }

    public void setId(Integer id){
        this.id = id;
    }

    public String getName(){
        return name;
    }

    public void setName(String name){
        this.name = name;
    }

    public String getEmail(){
        return email;
    }

    public void setEmail(String email){
        this.email = email;
    }
   
    public String getDepartment(){
        return department;
    }

    public void setDepartment(String department){
        this.department = department;
    }
}

Model / StudentRepository

package com.example.quiz1practice.model;

import org.springframework.data.jpa.repository.JpaRepository;

public interface StudentRepository extends JpaRepository<Student, Integer>{
   
}

Controller / StudentController

src/main/java/com/example/[project name]/controller/

package com.example.quiz1practice.controller;

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

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.example.quiz1practice.model.Student;
import com.example.quiz1practice.model.StudentRepository;

@CrossOrigin(origins = "http://localhost:3000")
@RestController
@RequestMapping("/api")

public class StudentController {
   
    @Autowired
    StudentRepository studentRepository;

    @GetMapping("/students")

    public ResponseEntity<List<Student>> getAllStudents() {
        try {
            List<Student> students = new ArrayList<Student>();
            studentRepository.findAll().forEach(students::add);
           
            if (students.isEmpty()) {
                return new ResponseEntity<>(HttpStatus.NO_CONTENT);
            }
   
            return new ResponseEntity<>(students, HttpStatus.OK);
        } catch (Exception e) {
            return new ResponseEntity<>(null, HttpStatus.INTERNAL_SERVER_ERROR);
        }
    }
   
    // New method: Get course by ID
    @GetMapping("/students/{id}")
    public ResponseEntity<Student> getStudentById(@PathVariable("id") Integer id) {
        Optional<Student> studentData = studentRepository.findById(id);
       
        if (studentData.isPresent()) {
            return new ResponseEntity<>(studentData.get(), HttpStatus.OK);
        } else {
            return new ResponseEntity<>(HttpStatus.NOT_FOUND);
        }
    }

    // Create student with validation
    @PostMapping("/students")
    public ResponseEntity<Object> createStudent(@RequestBody Student student) {
    String validationError = validateStudentInput(student);
    if (validationError != null) {
        return ResponseEntity.badRequest().body("{\"error\": \"" + validationError + "\"}");
    }

    try {
        Student _student = studentRepository.save(
            new Student(student.getName(), student.getEmail(), student.getDepartment())
        );
        return new ResponseEntity<>(_student, HttpStatus.CREATED);
    } catch (Exception e) {
        return new ResponseEntity<>(null, HttpStatus.INTERNAL_SERVER_ERROR);
    }
}

   // Update student with validation
   @PutMapping("/students/{id}")
   public ResponseEntity<Object> updateStudent(@PathVariable("id") Integer id, @RequestBody Student student) {
       Optional<Student> studentData = studentRepository.findById(id);
       
       if (!studentData.isPresent()) {
           return new ResponseEntity<>(HttpStatus.NOT_FOUND);
       }

       String validationError = validateStudentInput(student);
       if (validationError != null) {
           return ResponseEntity.badRequest().body("{\"error\": \"" + validationError + "\"}");
       }

       try {
           Student _student = studentData.get();
           _student.setName(student.getName());
           _student.setEmail(student.getEmail());
           _student.setDepartment(student.getDepartment());
           return new ResponseEntity<>(studentRepository.save(_student), HttpStatus.OK);
       } catch (Exception e) {
           return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
       }
   }

        // 👇 **Place the validateStudentInput method here, at the bottom of the class**
        private String validateStudentInput(Student student) {
            if (student.getName() == null || student.getName().trim().isEmpty()) {
                return "Name cannot be blank or empty.";
            }
           
            if (student.getEmail() == null || !student.getEmail().matches("^[A-Za-z0-9+_.-]+@(.+)$")) {
                return "Invalid email format. Please provide a valid email address.";
            }
   
            if (student.getDepartment() == null || student.getDepartment().trim().isEmpty()) {
                return "Department cannot be null or empty.";
            }
   
            return null; // No errors
        }

    // New method: Delete a student
    @DeleteMapping("/students/{id}")
    public ResponseEntity<Integer> deleteStudent(@PathVariable("id") Integer id) {
        try {
            studentRepository.deleteById(id);
            return new ResponseEntity<>(id, HttpStatus.OK);
    } catch (Exception e) {
        return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
    }
    }
}

Others

src/main/resources/application.properties

spring.application.name=crs

spring.datasource.url=jdbc:h2:mem:testdb

spring.datasource.driverClassName=org.h2.Driver

spring.datasource.username=sa

spring.datasource.password=

spring.jpa.database-platform=org.hibernate.dialect.H2Dialect

spring.h2.console.enabled=true

spring.h2.console.path=/h2-console


Init

CtrlShftP > Sprint Initializr > Create Maven > 3.4.1 > Java > com.example >[project name] > Jar > Java version 21 > Spring Web / Spring Data JPa / H2 Database

+ JDK installed

JDBC URL: jdbc:h2:mem:testdb


Postman

Header

Key: Content-Type

Value: Application/JSON


Body

raw

{
    "id": 3,
    "name": "",
    "email": "jamesdoe@gmail.com",
    "department": "Humanities"
}

0 comments: