Skip to content

Commit

Permalink
Fixed stocks going negative and fixed bug where the medicines that we…
Browse files Browse the repository at this point in the history
…re available still appeared to be added in the add medicine to pharmacy screen.
  • Loading branch information
devandrepascoa committed May 10, 2024
1 parent 61dac92 commit 2528a6a
Show file tree
Hide file tree
Showing 20 changed files with 184 additions and 125 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,9 @@ package pt.ulisboa.ist.pharmacist.http.controllers.medicines.models.getMedicines
import pt.ulisboa.ist.pharmacist.service.medicines.dtos.GetMedicinesWithClosestPharmacyOutputDto

data class GetMedicinesWithClosestPharmacyOutputModel(
val totalCount: Int,
val medicines: List<MedicineWithClosestPharmacyOutputModel>
) {
constructor(getMedicinesWithClosestPharmacyOutputDto: GetMedicinesWithClosestPharmacyOutputDto) : this(
totalCount = getMedicinesWithClosestPharmacyOutputDto.totalCount,
medicines = getMedicinesWithClosestPharmacyOutputDto.medicines.map { MedicineWithClosestPharmacyOutputModel(it) }
)
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,12 @@ import pt.ulisboa.ist.pharmacist.service.pharmacies.dtos.GetPharmaciesOutputDto
/**
* Output model for the GetPharmacies endpoint.
* @property totalCount the total number of pharmacies
* @property pharmacies the list of pharmacies
*/
data class GetPharmaciesOutputModel(
val totalCount: Int,
val pharmacies: List<PharmacyWithUserDataModel>
) {
constructor(getPharmaciesOutputDto: GetPharmaciesOutputDto) : this(
totalCount = getPharmaciesOutputDto.totalCount,
pharmacies = getPharmaciesOutputDto.pharmacies.map { PharmacyWithUserDataModel(it) }
)
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,12 @@ import pt.ulisboa.ist.pharmacist.service.pharmacies.dtos.ListAvailableMedicinesO
/**
* The output model of the 'List Available Medicines' endpoint.
*
* @property totalCount the number of medicines
* @property medicines the list of medicines
*/
data class ListAvailableMedicinesOutputModel(
val totalCount: Int,
val medicines: List<MedicineStockModel>
) {
constructor(listAvailableMedicinesOutputDto: ListAvailableMedicinesOutputDto) : this(
totalCount = listAvailableMedicinesOutputDto.totalCount,
medicines = listAvailableMedicinesOutputDto.medicines.map { MedicineStockModel(it) }
)
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import pt.ulisboa.ist.pharmacist.service.exceptions.AlreadyExistsException
import pt.ulisboa.ist.pharmacist.service.exceptions.InvalidArgumentException
import pt.ulisboa.ist.pharmacist.service.exceptions.NotFoundException
import pt.ulisboa.ist.pharmacist.service.pharmacies.dtos.GetPharmaciesOutputDto
import pt.ulisboa.ist.pharmacist.service.pharmacies.dtos.PharmacyWithUserDataDto
import pt.ulisboa.ist.pharmacist.service.utils.paginate

@Repository
Expand Down Expand Up @@ -66,8 +67,7 @@ class PharmaciesRepositoryMem(private val dataSource: MemDataSource) : Pharmacie
userMarkedAsFavorite = user.favoritePharmacies.contains(pharmacy.pharmacyId),
userFlagged = user.flaggedPharmacies.contains(pharmacy.pharmacyId)
)
},
totalCount = totalPharmacies.size
}.map { PharmacyWithUserDataDto(it) },
)
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ class MedicinesServiceImpl(
limit = limit
)

return GetMedicinesWithClosestPharmacyOutputDto(0, medicines)
return GetMedicinesWithClosestPharmacyOutputDto( medicines)
}

override fun createMedicine(name: String, description: String, boxPhotoUrl: String): MedicineDto {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package pt.ulisboa.ist.pharmacist.service.medicines.dtos

data class GetMedicinesOutputDto(
val totalCount: Int,
val medicines: List<MedicineDto>
)
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package pt.ulisboa.ist.pharmacist.service.medicines.dtos

data class GetMedicinesWithClosestPharmacyOutputDto(
val totalCount: Int,
val medicines: List<MedicineWithClosestPharmacyDto>
)
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ import pt.ulisboa.ist.pharmacist.service.pharmacies.dtos.AddNewMedicineOutputDto
import pt.ulisboa.ist.pharmacist.service.pharmacies.dtos.ChangeMedicineStockOutputDto
import pt.ulisboa.ist.pharmacist.service.pharmacies.dtos.GetPharmaciesOutputDto
import pt.ulisboa.ist.pharmacist.service.pharmacies.dtos.ListAvailableMedicinesOutputDto
import pt.ulisboa.ist.pharmacist.service.pharmacies.dtos.MedicineStockDto
import pt.ulisboa.ist.pharmacist.service.pharmacies.dtos.PharmacyDto
import pt.ulisboa.ist.pharmacist.service.pharmacies.dtos.PharmacyWithUserDataDto

Expand Down Expand Up @@ -82,7 +83,7 @@ class PharmaciesServiceImpl(
offset = offset,
limit = limit
)
return ListAvailableMedicinesOutputDto(medicines)
return ListAvailableMedicinesOutputDto(medicines.map { MedicineStockDto(it) })
}

override fun addNewMedicine(pharmacyId: Long, medicineId: Long, quantity: Long): AddNewMedicineOutputDto {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,5 @@ package pt.ulisboa.ist.pharmacist.service.pharmacies.dtos
import pt.ulisboa.ist.pharmacist.domain.pharmacies.PharmacyWithUserData

class GetPharmaciesOutputDto(
val totalCount: Int,
val pharmacies: List<PharmacyWithUserDataDto>
) {
constructor(pharmacies: List<PharmacyWithUserData>, totalCount: Int) : this(
totalCount = totalCount,
pharmacies = pharmacies.map { PharmacyWithUserDataDto(it) }
)
}
)
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,5 @@ package pt.ulisboa.ist.pharmacist.service.pharmacies.dtos
import pt.ulisboa.ist.pharmacist.domain.pharmacies.MedicineStock

class ListAvailableMedicinesOutputDto(
val totalCount: Int,
val medicines: List<MedicineStockDto>
) {
constructor(medicines: List<MedicineStock>) : this(
totalCount = medicines.size,
medicines = medicines.map { MedicineStockDto(it) }
)
}
)
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ import pt.ulisboa.ist.pharmacist.domain.medicines.Medicine
import pt.ulisboa.ist.pharmacist.domain.pharmacies.Pharmacy

data class GetMedicinesWithClosestPharmacyOutputModel(
val totalCount: Int,
val medicines: List<MedicineWithClosestPharmacyOutputModel>
)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,14 @@ import okhttp3.OkHttpClient
import pt.ulisboa.ist.pharmacist.domain.pharmacies.Location
import pt.ulisboa.ist.pharmacist.service.http.HTTPService
import pt.ulisboa.ist.pharmacist.service.http.connection.APIResult
import pt.ulisboa.ist.pharmacist.service.http.connection.isSuccess
import pt.ulisboa.ist.pharmacist.service.http.services.pharmacies.models.addPharmacy.AddPharmacyOutputModel
import pt.ulisboa.ist.pharmacist.service.http.services.pharmacies.models.changeMedicineStock.ChangeMedicineStockModel
import pt.ulisboa.ist.pharmacist.service.http.services.pharmacies.models.changeMedicineStock.MedicineStockOperation
import pt.ulisboa.ist.pharmacist.service.http.services.pharmacies.models.getPharmacies.GetPharmaciesOutputModel
import pt.ulisboa.ist.pharmacist.service.http.services.pharmacies.models.getPharmacyById.PharmacyWithUserDataModel
import pt.ulisboa.ist.pharmacist.service.http.services.pharmacies.models.listAvailableMedicines.ListAvailableMedicinesOutputModel
import pt.ulisboa.ist.pharmacist.service.http.services.pharmacies.models.listAvailableMedicines.MedicineStockModel
import pt.ulisboa.ist.pharmacist.service.http.utils.Uris
import pt.ulisboa.ist.pharmacist.session.SessionManager

Expand Down Expand Up @@ -99,6 +101,29 @@ class PharmaciesService(
)
}

suspend fun listAllAvailableMedicines(
pharmacyId: Long
): APIResult<ListAvailableMedicinesOutputModel> {
var offset = 0L
val allMedicines = mutableListOf<MedicineStockModel>()

while (true) {
val result = listAvailableMedicines(pharmacyId, MAX_LIMIT, offset)
if (result.isSuccess()) {
val medicines = result.data.medicines
if (medicines.isEmpty())
break

allMedicines.addAll(medicines)
offset += MAX_LIMIT
} else {
return APIResult.Failure(result.error)
}
}

return APIResult.Success(ListAvailableMedicinesOutputModel(allMedicines))
}

suspend fun ratePharmacy(pharmacyId: Long, rating: Int): APIResult<Unit> {
return post<Unit>(
link = Uris.pharmacyRating(pharmacyId),
Expand Down Expand Up @@ -159,6 +184,10 @@ class PharmaciesService(
)
)
}

companion object {
private const val MAX_LIMIT = 100L
}
}

data class AddNewMedicineInputModel(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,5 @@ package pt.ulisboa.ist.pharmacist.service.http.services.pharmacies.models.getPha
import pt.ulisboa.ist.pharmacist.service.http.services.pharmacies.models.getPharmacyById.PharmacyWithUserDataModel

data class GetPharmaciesOutputModel(
val totalCount: Int,
val pharmacies: List<PharmacyWithUserDataModel>
)
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ package pt.ulisboa.ist.pharmacist.service.http.services.pharmacies.models.listAv
import pt.ulisboa.ist.pharmacist.domain.medicines.Medicine

data class ListAvailableMedicinesOutputModel(
val totalCount: Int,
val medicines: List<MedicineStockModel>
)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -196,13 +196,3 @@ class RealTimeUpdatesService(
}
}

class JsonWebSocket(private val webSocket: WebSocket) {
fun send(message: Any) {
val json = Gson().toJson(message)
webSocket.send(json)
}

fun sendByteString(byteString: ByteString) {
webSocket.send(byteString)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import androidx.activity.result.contract.ActivityResultContracts
import androidx.lifecycle.lifecycleScope
import kotlinx.coroutines.launch
import pt.ulisboa.ist.pharmacist.ui.screens.PharmacistActivity
import pt.ulisboa.ist.pharmacist.ui.screens.addMedicineToPharmacy.AddMedicineToPharmacyViewModel.AddMedicineToPharmacyState.NOT_LOADED
import pt.ulisboa.ist.pharmacist.ui.screens.createMedicine.CreateMedicineActivity
import pt.ulisboa.ist.pharmacist.ui.screens.shared.navigateToForResult
import pt.ulisboa.ist.pharmacist.ui.screens.shared.viewModelInit
Expand Down Expand Up @@ -43,11 +44,14 @@ class AddMedicineToPharmacyActivity : PharmacistActivity() {
viewModel.checkForLocationAccessPermission(this)

lifecycleScope.launch {
if (viewModel.loadingState == NOT_LOADED)
viewModel.loadAvailableMedicines(pharmacyId)
viewModel.startObtainingLocation(this@AddMedicineToPharmacyActivity)
}

setContent {
AddMedicineToPharmacyScreen(
loadingState = viewModel.loadingState,
hasLocationPermission = viewModel.hasLocationPermission,
medicinesState = viewModel.medicinesState,
onSearch = { viewModel.searchMedicines(it) },
Expand Down
Loading

0 comments on commit 2528a6a

Please sign in to comment.