Skip to content
Merged
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
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import com.pentagon.Quicky_Backend.dto.DriverEarningsProfilesDto;
import com.pentagon.Quicky_Backend.dto.DriverProfilesDto;
import com.pentagon.Quicky_Backend.dto.DriversCountDto;
import com.pentagon.Quicky_Backend.dto.InactiveDriversCountDto;
import com.pentagon.Quicky_Backend.service.DriverProfilesService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
Expand Down Expand Up @@ -44,4 +45,16 @@ public ResponseEntity<List<DriverEarningsProfilesDto>> getTodayEarnings() {
return new ResponseEntity<>(drivers, HttpStatus.OK);
}

@GetMapping("/driver-profiles/inactive-drivers")
public ResponseEntity<List<DriverProfilesDto>> getInactiveDrivers() {
List<DriverProfilesDto> drivers = driverProfilesService.getInactiveDrivers();
return new ResponseEntity<>(drivers, HttpStatus.OK);
}

@GetMapping("/driver-profiles/inactive-drivers/count-by-availability")
public ResponseEntity<List<InactiveDriversCountDto>> getInactiveDriversCount() {
List<InactiveDriversCountDto> drivers = driverProfilesService.getInactiveDriversCount();
return new ResponseEntity<>(drivers, HttpStatus.OK);
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package com.pentagon.Quicky_Backend.dto;

public interface InactiveDriversCountDto {
Long getInactiveDriversCount();
Long getActiveDriversCount();
}
Original file line number Diff line number Diff line change
Expand Up @@ -66,8 +66,16 @@ public class DriverDetails {
@Column(name = "wallet_balance", nullable = false, columnDefinition = "double precision default 0")
private Double walletBalance = 0.0;

@Column(name = "approved", nullable = false, columnDefinition = "BOOLEAN DEFAULT FALSE")
private Boolean approved = false;

public enum ApprovalStatus {
PENDING,
APPROVED,
REJECTED
}

@Enumerated(EnumType.STRING)
@Column(name = "approved", nullable = false, columnDefinition = "VARCHAR(20) DEFAULT 'PENDING'")
private ApprovalStatus approved;

@Column(name = "profile_image_url")
private String profileImageUrl;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,6 @@
package com.pentagon.Quicky_Backend.repository;

import com.pentagon.Quicky_Backend.dto.ChurnPredictFeatureDto;
import com.pentagon.Quicky_Backend.dto.DriverEarningsProfilesDto;
import com.pentagon.Quicky_Backend.dto.DriverProfilesDto;
import com.pentagon.Quicky_Backend.dto.DriversCountDto;
import com.pentagon.Quicky_Backend.dto.NewRegistrationsDto;
import com.pentagon.Quicky_Backend.dto.*;
import com.pentagon.Quicky_Backend.entity.DriverDetails;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
Expand Down Expand Up @@ -40,7 +36,7 @@ public interface DriverDetailsRepo extends JpaRepository<DriverDetails, Integer>
d.mobile_number AS mobileNumber
FROM driver_details dd
LEFT JOIN drivers d ON dd.user_id = d.user_id
WHERE dd.approved = false
WHERE dd.approved = 'PENDING'
ORDER BY dd.user_details_id
""", nativeQuery = true)
List<NewRegistrationsDto> findAllPendingRegistrations();
Expand Down Expand Up @@ -69,7 +65,7 @@ public interface DriverDetailsRepo extends JpaRepository<DriverDetails, Integer>
FROM driver_details dd
JOIN drivers d ON d.user_id = dd.user_id
LEFT JOIN rating r ON r.user_details_id = dd.user_details_id
WHERE dd.approved = true
WHERE dd.approved = 'APPROVED'
GROUP BY dd.user_details_id, dd.first_name, dd.last_name, dd.date_of_birth, dd.gender,
dd.home_no, dd.street_name, dd.city, dd.district, dd.license_number,
dd.license_front_url, dd.license_back_url, dd.registration_date, dd.availability,
Expand Down Expand Up @@ -102,7 +98,7 @@ public interface DriverDetailsRepo extends JpaRepository<DriverDetails, Integer>
FROM driver_details dd
JOIN drivers d ON d.user_id = dd.user_id
LEFT JOIN rating r ON r.user_details_id = dd.user_details_id
WHERE dd.approve_status = 'ACCEPTED'
WHERE dd.approved = 'APPROVED'
AND dd.registration_date = CURRENT_DATE
GROUP BY dd.user_details_id, dd.first_name, dd.last_name, dd.date_of_birth, dd.gender,
dd.home_no, dd.street_name, dd.city, dd.district, dd.license_number,
Expand All @@ -114,53 +110,54 @@ public interface DriverDetailsRepo extends JpaRepository<DriverDetails, Integer>

@Query(value = "SELECT registration_date, COUNT(*) AS driversCount " +
"FROM driver_details " +
"WHERE approved = true " +
"WHERE approved = 'APPROVED' " +
"GROUP BY registration_date " +
"ORDER BY registration_date", nativeQuery = true)
List<DriversCountDto> countApprovedDriversByRegistrationDate();

@Query(value = """
SELECT
dd.user_details_id AS userDetailsId,
dd.first_name AS firstName,
dd.last_name AS lastName,
dd.date_of_birth AS dateOfBirth,
dd.gender AS gender,
dd.home_no AS homeNo,
dd.street_name AS streetName,
dd.city AS city,
dd.district AS district,
dd.license_number AS licenseNumber,
dd.license_front_url AS licenseFrontURL,
dd.license_back_url AS licenseBackURL,
dd.registration_date AS registrationDate,
dd.availability AS availability,
dd.stripe_id AS stripeId,
dd.wallet_balance AS walletBalance,
d.email AS email,
d.mobile_number AS mobileNumber,
COALESCE(SUM(r.rating_count) / NULLIF(COUNT(r.rating_id), 0), 0) AS rating,
COALESCE(SUM(e.delivery_charge), 0) AS earnings
FROM
driver_details dd
JOIN
drivers d ON dd.user_id = d.user_id
LEFT JOIN
earning e ON dd.user_details_id = e.driver_id
LEFT JOIN
delivery_order o ON e.delivery_id = o.delivery_id AND DATE(o.time_stamp) = CURRENT_DATE
LEFT JOIN
rating r ON o.delivery_id = r.delivery_id
WHERE
dd.approve_status = 'ACCEPTED'
GROUP BY
dd.user_details_id, dd.first_name, dd.last_name, dd.date_of_birth, dd.gender,
dd.home_no, dd.street_name, dd.city, dd.district, dd.license_number,
dd.license_front_url, dd.license_back_url, dd.registration_date, dd.availability,
dd.stripe_id, dd.wallet_balance, d.email, d.mobile_number
ORDER BY
earnings DESC
""", nativeQuery = true)
SELECT
dd.user_details_id AS userDetailsId,
dd.first_name AS firstName,
dd.last_name AS lastName,
dd.date_of_birth AS dateOfBirth,
dd.gender AS gender,
dd.home_no AS homeNo,
dd.street_name AS streetName,
dd.city AS city,
dd.district AS district,
dd.license_number AS licenseNumber,
dd.license_front_url AS licenseFrontURL,
dd.license_back_url AS licenseBackURL,
dd.registration_date AS registrationDate,
dd.availability AS availability,
dd.stripe_id AS stripeId,
dd.wallet_balance AS walletBalance,
d.email AS email,
d.mobile_number AS mobileNumber,
COALESCE(SUM(r.rating_count) / NULLIF(COUNT(r.rating_id), 0), 0) AS rating,
COALESCE(SUM(e.delivery_charge), 0) AS earnings
FROM
driver_details dd
JOIN
drivers d ON dd.user_id = d.user_id
LEFT JOIN
earning e ON dd.user_details_id = e.driver_id
LEFT JOIN
delivery_order o ON e.delivery_id = o.delivery_id
LEFT JOIN
rating r ON o.delivery_id = r.delivery_id
WHERE
dd.approved = 'APPROVED'
AND DATE(e.created_at) = CURRENT_DATE
GROUP BY
dd.user_details_id, dd.first_name, dd.last_name, dd.date_of_birth, dd.gender,
dd.home_no, dd.street_name, dd.city, dd.district, dd.license_number,
dd.license_front_url, dd.license_back_url, dd.registration_date, dd.availability,
dd.stripe_id, dd.wallet_balance, d.email, d.mobile_number
ORDER BY
earnings DESC
""", nativeQuery = true)
List<DriverEarningsProfilesDto> findApprovedDriversWithEarningsToday();

// Churn feature query
Expand Down Expand Up @@ -212,4 +209,68 @@ driver_ratings AS (
""", nativeQuery = true)
List<ChurnPredictFeatureDto> getDriverFeaturesForChurnPrediction();

}
@Query(value = """
SELECT
dd.user_details_id AS userDetailsId,
dd.first_name AS firstName,
dd.last_name AS lastName,
dd.date_of_birth AS dateOfBirth,
dd.gender AS gender,
dd.home_no AS homeNo,
dd.street_name AS streetName,
dd.city AS city,
dd.district AS district,
dd.license_number AS licenseNumber,
dd.license_front_url AS licenseFrontURL,
dd.license_back_url AS licenseBackURL,
dd.registration_date AS registrationDate,
dd.availability AS availability,
dd.stripe_id AS stripeId,
dd.wallet_balance AS walletBalance,
d.email AS email,
d.mobile_number AS mobileNumber,
COALESCE(SUM(r.rating_count) / NULLIF(COUNT(r.rating_id), 0), 0) AS rating
FROM driver_details dd
JOIN drivers d ON d.user_id = dd.user_id
LEFT JOIN rating r ON r.user_details_id = dd.user_details_id
WHERE dd.approved = 'APPROVED'
AND d.user_id IN (
SELECT da.user_id
FROM driver_availability da
GROUP BY da.user_id
HAVING MAX(da.end_time) < now() - interval '7 days'
)
GROUP BY dd.user_details_id, dd.first_name, dd.last_name, dd.date_of_birth, dd.gender,
dd.home_no, dd.street_name, dd.city, dd.district, dd.license_number,
dd.license_front_url, dd.license_back_url, dd.registration_date, dd.availability,
dd.stripe_id, dd.wallet_balance, d.email, d.mobile_number
ORDER BY dd.user_details_id
""", nativeQuery = true)
List<DriverProfilesDto> findApprovedInactiveDrivers();

@Query(value = """
SELECT
COUNT(*) FILTER (
WHERE d.user_id IN (
SELECT da.user_id
FROM driver_availability da
GROUP BY da.user_id
HAVING MAX(da.end_time) < now() - interval '7 days'
)
) AS inactiveDriversCount,

COUNT(*) FILTER (
WHERE d.user_id NOT IN (
SELECT da.user_id
FROM driver_availability da
GROUP BY da.user_id
HAVING MAX(da.end_time) < now() - interval '7 days'
)
) AS activeDriversCount
FROM driver_details dd
JOIN drivers d ON d.user_id = dd.user_id
WHERE dd.approved = 'APPROVED'
""", nativeQuery = true)
List<InactiveDriversCountDto> countApprovedInactiveDrivers();

}
Original file line number Diff line number Diff line change
Expand Up @@ -13,14 +13,14 @@ public interface DriverEarningsRepo extends JpaRepository<Earning, Long> {

@Query(value = """
SELECT
DATE(o.time_stamp) AS earningDate,
DATE(e.created_at) AS earningDate,
COALESCE(SUM(e.delivery_charge), 0) AS amount
FROM
earning e
JOIN
delivery_order o ON e.delivery_id = o.delivery_id
GROUP BY
DATE(o.time_stamp)
DATE(e.created_at)
ORDER BY
earningDate
""", nativeQuery = true)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import com.pentagon.Quicky_Backend.dto.DriverEarningsProfilesDto;
import com.pentagon.Quicky_Backend.dto.DriverProfilesDto;
import com.pentagon.Quicky_Backend.dto.DriversCountDto;
import com.pentagon.Quicky_Backend.dto.InactiveDriversCountDto;
import com.pentagon.Quicky_Backend.repository.DriverDetailsRepo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
Expand Down Expand Up @@ -31,4 +32,11 @@ public List<DriverEarningsProfilesDto> getTodayEarnings() {
return driverDetailsRepo.findApprovedDriversWithEarningsToday();
}

public List<DriverProfilesDto> getInactiveDrivers() {
return driverDetailsRepo.findApprovedInactiveDrivers();
}

public List<InactiveDriversCountDto> getInactiveDriversCount() {
return driverDetailsRepo.countApprovedInactiveDrivers();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ public boolean addDriver(Integer userDetailsId) {

if (optionalNewDriver.isPresent()) {
DriverDetails newDriver = optionalNewDriver.get();
newDriver.setApproved(true);
newDriver.setApproved(DriverDetails.ApprovalStatus.APPROVED);
newDriver.setRegistrationDate(LocalDate.now());
driverDetailsRepo.save(newDriver);

Expand All @@ -41,7 +41,7 @@ public boolean rejectDriver(Integer userDetailsId) {

if (optionalNewDriver.isPresent()) {
DriverDetails newDriver = optionalNewDriver.get();
newDriver.setApproved(false);
newDriver.setApproved(DriverDetails.ApprovalStatus.REJECTED);
driverDetailsRepo.save(newDriver);

return true;
Expand Down