Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 18 additions & 0 deletions docker-compose.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
version: '3.8'

services:
postgres:
restart: always
container_name: "oosd-postgres"
image: postgres:13.14-bullseye
environment:
POSTGRES_USER: "ali"
POSTGRES_PASSWORD: "ppdaaa333ddd33dddd"
POSTGRES_DB: "oosd_db"
volumes:
- postgres-data:/var/lib/postgresql/data
ports:
- "5433:5432"

volumes:
postgres-data: { }
1,171 changes: 1,171 additions & 0 deletions group_1.drawio

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
package com.taxi.framework.user.controller;

import com.taxi.framework.user.dto.BaseDriverServiceDTO;
import com.taxi.framework.user.service.DriverService;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.util.List;

public abstract class AbstractDriverController<T extends BaseDriverServiceDTO> {

protected final DriverService<T> driverService;

protected AbstractDriverController(DriverService<T> driverService) {
this.driverService = driverService;
}

@PostMapping("/update")
public ResponseEntity<?> updateDriver(@RequestBody T dto) {
try {
T updatedDto = driverService.update(dto);
return ResponseEntity.ok(updatedDto);
} catch (IllegalStateException e) {
return ResponseEntity.status(404).body(e.toString());
} catch (IllegalArgumentException e) {
return ResponseEntity.status(403).body(e.toString());
}
}

@GetMapping("/{id}")
public abstract ResponseEntity<T> getDriverById(@PathVariable Long id);

@GetMapping("/all")
public ResponseEntity<List<T>> getAllDrivers() {
List<T> drivers = driverService.findAllDrivers();
return ResponseEntity.ok(drivers);
}

@PostMapping("/verify")
public ResponseEntity<Boolean> verifyDriverLicense(@RequestBody T dto) {
boolean verified = driverService.verifyDriverLicense(dto);
return ResponseEntity.ok(verified);
}

@GetMapping("/available/{id}")
public ResponseEntity<Boolean> isDriverAvailable(@PathVariable Long id) {
boolean available = driverService.isDriverAvailable(id);
return ResponseEntity.ok(available);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
package com.taxi.framework.user.controller;

import com.taxi.framework.user.dto.BasePassengerServiceDTO;
import com.taxi.framework.user.service.PassengerService;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;

import java.util.List;
import java.util.stream.Collectors;

public abstract class AbstractPassengerController<T extends BasePassengerServiceDTO> {
protected final PassengerService<T> passengerService;

protected AbstractPassengerController(PassengerService<T> passengerService) {
this.passengerService = passengerService;
}

@PostMapping("/update")
public ResponseEntity<?> update(@RequestBody T dto) {
try {
T updatedDto = passengerService.update(dto);
return ResponseEntity.ok(updatedDto);
} catch (IllegalStateException e) {
return ResponseEntity.status(404).body(e.toString());
} catch (IllegalArgumentException e) {
return ResponseEntity.status(403).body(e.toString());
}
}

@GetMapping("/all")
public ResponseEntity<List<T>> fetchAll() {
List<T> allPassengers = passengerService.fetchAllPassengers().stream()
.map(passengerService::convertToDTO)
.collect(Collectors.toList());
return ResponseEntity.ok(allPassengers);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package com.taxi.framework.user.controller;

import com.taxi.framework.user.dto.BaseUserSignoutDTO;
import com.taxi.framework.user.dto.BaseUserSignupDTO;
import com.taxi.framework.user.service.SignoutService;
import com.taxi.framework.user.service.SignupService;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;

public abstract class AbstractSignoutController<T extends BaseUserSignoutDTO> {

protected final SignoutService<T> signoutService;

protected AbstractSignoutController(SignoutService<T> signoutService) {
this.signoutService = signoutService;
}

@PostMapping("/signout")
public ResponseEntity<T> signOut(@RequestBody T dto) {
return ResponseEntity.ok(signoutService.signOut(dto));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package com.taxi.framework.user.dao;

public enum AvailabilityStatus {
AVAILABLE, UNAVAILABLE
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
package com.taxi.framework.user.dao;

import jakarta.persistence.*;
import lombok.Getter;
import lombok.Setter;

import java.util.Date;

@Setter
@Getter
@Entity
@Table(name = "drivers")
public class DriverDao extends UserDao {
@Enumerated(EnumType.STRING)
private VehicleType vehicleType;
private String vehicleModel;
private String vehicleColor;
private String vehicleLicensePlateNumber;
private Date vehicleLicenseExpireDate;
private String vehicleLicenseState;

private String licenseNumber;
private Date licenseExpireDate;
@Enumerated(EnumType.STRING)
private LicenseState licenseState;

private String insuranceDetail;

private double rating;

@Enumerated(EnumType.STRING)
private AvailabilityStatus available;

@Override
public String toString() {
return "DriverDao{" +
"vehicleType='" + vehicleType + '\'' +
", vehicleModel='" + vehicleModel + '\'' +
", vehicleColor='" + vehicleColor + '\'' +
", vehicleLicensePlateNumber='" + vehicleLicensePlateNumber + '\'' +
", vehicleLicenseExpireDate=" + vehicleLicenseExpireDate +
", vehicleLicenseState='" + vehicleLicenseState + '\'' +
", licenseNumber='" + licenseNumber + '\'' +
", licenseExpireDate=" + licenseExpireDate +
", licenseState='" + licenseState + '\'' +
", insuranceDetail='" + insuranceDetail + '\'' +
", rating=" + rating +
", available='" + available + '\'' +
'}';
}


}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package com.taxi.framework.user.dao;

public enum LicenseState {
VALID, EXPIRED
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package com.taxi.framework.user.dao;

public enum MembershipType {
GOLD, BRONZE, SILVER
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package com.taxi.framework.user.dao;

import jakarta.persistence.*;
import lombok.Getter;
import lombok.Setter;

@Setter
@Getter
@Entity
@Table(name = "passengers")
public class PassengerDao extends UserDao {
@Enumerated(EnumType.STRING)
private MembershipType membership;

private String homeAddress;

@Override
public String toString() {
return "PassengerDao{" +
"membership='" + membership + '\'' +
", homeAddress='" + homeAddress + '\'' +
'}';
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,38 @@
import lombok.Getter;
import lombok.Setter;

import java.util.Date;

@Setter
@Getter
@Entity
@Table(name = "users")
public class UserDao {
@MappedSuperclass
public abstract class UserDao {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String username;
private String password;
private String email;
private Date dateOfBirth;
private String signInStatus;
private String phone;
private String fullName;

@Enumerated(EnumType.STRING)
private UserRole role;

@Override
public String toString() {
return "UserDao{" +
"id=" + id +
", username='" + username + '\'' +
", password='" + password + '\'' +
", email='" + email + '\'' +
", dateOfBirth=" + dateOfBirth +
", signInStatus='" + signInStatus + '\'' +
", phone='" + phone + '\'' +
", fullName='" + fullName + '\'' +
", role=" + role +
'}';
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package com.taxi.framework.user.dao;

public enum UserRole {
PASSENGER, DRIVER, ADMIN
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package com.taxi.framework.user.dao;

public enum VehicleType {
SEDAN, SUV, VAN, TRUCK
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package com.taxi.framework.user.dto;

import com.taxi.framework.user.dao.LicenseState;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

import java.util.Date;

@Setter
@Getter
@NoArgsConstructor
public class BaseDriverServiceDTO {
private Long id;
private String username;
private String password;
private String email;
private String phone;
private String fullName;

private String vehicleType;
private String vehicleModel;
private String vehicleColor;
private String vehicleLicensePlateNumber;
private Date vehicleLicenseExpireDate;

private String licenseNumber;
private Date licenseExpireDate;
private String licenseState;

private String insuranceDetail;

private double rating;

private String available;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package com.taxi.framework.user.dto;

import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

import java.util.Date;

@Setter
@Getter
@NoArgsConstructor
public class BasePassengerServiceDTO {
private Long id;
private String username;
private String password;
private String email;
private String phone;
private String fullName;

private String membership;
private String homeAddress;
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package com.taxi.framework.user.dto;

import lombok.Data;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
Expand All @@ -9,8 +8,8 @@
@Setter
@NoArgsConstructor
public class BaseUserSigninDTO {

private String username;
private String email;
private String phone;
private String password;

}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package com.taxi.framework.user.dto;

import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

@Getter
@Setter
@NoArgsConstructor
public class BaseUserSignoutDTO {
private Long id;
private String role;
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,5 +12,6 @@
public class BaseUserSignupDTO {
private String username;
private String password;
private String email;
private Date dateOfBirth;
}
Loading