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
3 changes: 2 additions & 1 deletion build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ dependencies {
// gitcheck
paperLibrary("com.eternalcode:gitcheck:1.0.0")

// metrics and sentry
// metrics
implementation("org.bstats:bstats-bukkit:3.1.0")

// database
Expand Down Expand Up @@ -142,6 +142,7 @@ tasks {
mergeServiceFiles()

val relocationPrefix = "com.eternalcode.parcellockers.libs"

listOf(
"org.bstats"
).forEach { relocate(it, "$relocationPrefix.$it") }
Expand Down
12 changes: 5 additions & 7 deletions src/main/java/com/eternalcode/parcellockers/ParcelLockers.java
Original file line number Diff line number Diff line change
Expand Up @@ -30,12 +30,12 @@
import com.eternalcode.parcellockers.locker.validation.LockerValidationService;
import com.eternalcode.parcellockers.locker.validation.LockerValidator;
import com.eternalcode.parcellockers.notification.NoticeService;
import com.eternalcode.parcellockers.parcel.ParcelDispatchService;
import com.eternalcode.parcellockers.parcel.ParcelService;
import com.eternalcode.parcellockers.parcel.ParcelServiceImpl;
import com.eternalcode.parcellockers.parcel.ParcelStatus;
import com.eternalcode.parcellockers.parcel.command.ParcelCommand;
import com.eternalcode.parcellockers.parcel.repository.ParcelRepositoryOrmLite;
import com.eternalcode.parcellockers.parcel.service.ParcelDispatchService;
import com.eternalcode.parcellockers.parcel.service.ParcelService;
import com.eternalcode.parcellockers.parcel.service.ParcelServiceImpl;
import com.eternalcode.parcellockers.parcel.task.ParcelSendTask;
import com.eternalcode.parcellockers.updater.UpdaterService;
import com.eternalcode.parcellockers.user.UserManager;
Expand All @@ -57,7 +57,6 @@
import java.io.File;
import java.sql.SQLException;
import java.time.Duration;
import java.util.ArrayList;
import java.util.stream.Stream;
import net.kyori.adventure.text.minimessage.MiniMessage;
import net.milkbowl.vault.economy.Economy;
Expand Down Expand Up @@ -201,11 +200,10 @@ public void onEnable() {
new Metrics(this, 17677);
new UpdaterService(this.getPluginMeta().getVersion());

parcelRepository.fetchAll().thenAccept(optionalParcels -> optionalParcels
.orElseGet(ArrayList::new)
parcelRepository.findAll().thenAccept(optionalParcels -> optionalParcels
.stream()
.filter(parcel -> parcel.status() != ParcelStatus.DELIVERED)
.forEach(parcel -> deliveryRepository.fetch(parcel.uuid()).thenAccept(optionalDelivery ->
.forEach(parcel -> deliveryRepository.find(parcel.uuid()).thenAccept(optionalDelivery ->
optionalDelivery.ifPresent(delivery -> {
long delay = Math.max(0, delivery.deliveryTimestamp().toEpochMilli() - System.currentTimeMillis());
scheduler.runLaterAsync(new ParcelSendTask(parcel, parcelService, deliveryManager), Duration.ofMillis(delay));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
import com.eternalcode.parcellockers.itemstorage.ItemStorageManager;
import com.eternalcode.parcellockers.locker.LockerManager;
import com.eternalcode.parcellockers.notification.NoticeService;
import com.eternalcode.parcellockers.parcel.ParcelService;
import com.eternalcode.parcellockers.parcel.service.ParcelService;
import dev.rollczi.litecommands.annotations.argument.Arg;
import dev.rollczi.litecommands.annotations.command.Command;
import dev.rollczi.litecommands.annotations.context.Sender;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,10 @@ public static class ParcelMessages extends OkaeriConfig {
.chat("&4✘ &cAn error occurred while collecting the parcel.")
.sound(SoundEventKeys.ENTITY_VILLAGER_NO)
.build();
public Notice databaseError = Notice.builder()
.chat("&4✘ &cA database error occurred. Please contact an administrator.")
.sound(SoundEventKeys.ENTITY_ITEM_BREAK)
.build();
public Notice noInventorySpace = Notice.builder()
.chat("&4✘ &cYou don't have enough space in your inventory to collect the parcel!")
.sound(SoundEventKeys.ENTITY_VILLAGER_NO)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ public CompletableFuture<Optional<ParcelContent>> get(UUID parcelId) {
if (content != null) {
return CompletableFuture.completedFuture(Optional.of(content));
}
return this.contentRepository.fetch(parcelId).thenApply(optional -> {
return this.contentRepository.find(parcelId).thenApply(optional -> {
optional.ifPresent(value -> this.cache.put(parcelId, value));
return optional;
});
Expand All @@ -52,9 +52,9 @@ public ParcelContent create(UUID parcel, List<ItemStack> items) {
}

public CompletableFuture<Boolean> delete(UUID parcel) {
return this.contentRepository.delete(parcel).thenApply(i -> {
return this.contentRepository.delete(parcel).thenApply(success -> {
this.cache.invalidate(parcel);
return i > 0;
return success;
});
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,9 @@ public interface ParcelContentRepository {

CompletableFuture<Void> save(ParcelContent parcelContent);

CompletableFuture<Optional<ParcelContent>> fetch(UUID uniqueId);
CompletableFuture<Optional<ParcelContent>> find(UUID uniqueId);

CompletableFuture<Integer> delete(UUID uniqueId);
CompletableFuture<Boolean> delete(UUID uniqueId);

CompletableFuture<Integer> deleteAll();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,8 @@ public CompletableFuture<Void> save(ParcelContent parcelContent) {
}

@Override
public CompletableFuture<Integer> delete(UUID uniqueId) {
return this.deleteById(ParcelContentTable.class, uniqueId);
public CompletableFuture<Boolean> delete(UUID uniqueId) {
return this.deleteById(ParcelContentTable.class, uniqueId).thenApply(i -> i > 0);
}

@Override
Expand All @@ -39,7 +39,7 @@ public CompletableFuture<Integer> deleteAll() {
}

@Override
public CompletableFuture<Optional<ParcelContent>> fetch(UUID uniqueId) {
public CompletableFuture<Optional<ParcelContent>> find(UUID uniqueId) {
return this.selectSafe(ParcelContentTable.class, uniqueId)
.thenApply(optional -> optional.map(ParcelContentTable::toParcelContent));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,16 +28,12 @@ public DeliveryManager(DeliveryRepository deliveryRepository) {
this.cacheAll();
}

public Delivery getOrCreate(UUID parcel, Instant deliveryTimestamp) {
return this.deliveryCache.get(parcel, key -> this.create(key, deliveryTimestamp));
}

public CompletableFuture<Optional<Delivery>> get(UUID parcel) {
Delivery cached = this.deliveryCache.getIfPresent(parcel);
if (cached != null) {
return CompletableFuture.completedFuture(Optional.of(cached));
}
return this.deliveryRepository.fetch(parcel).thenApply(optional -> {
return this.deliveryRepository.find(parcel).thenApply(optional -> {
optional.ifPresent(delivery -> this.deliveryCache.put(parcel, delivery));
return optional;
});
Expand All @@ -54,9 +50,9 @@ public Delivery create(UUID parcel, Instant deliveryTimestamp) {
}

public CompletableFuture<Boolean> delete(UUID parcel) {
return this.deliveryRepository.delete(parcel).thenApply(i -> {
return this.deliveryRepository.delete(parcel).thenApply(success -> {
this.deliveryCache.invalidate(parcel);
return i > 0;
return success;
});
}

Expand All @@ -72,7 +68,7 @@ public CompletableFuture<Void> deleteAll(CommandSender sender, NoticeService not
}

private void cacheAll() {
this.deliveryRepository.fetchAll()
.thenAccept(all -> all.ifPresent(list -> list.forEach(delivery -> this.deliveryCache.put(delivery.parcel(), delivery))));
this.deliveryRepository.findAll()
.thenAccept(list -> list.forEach(delivery -> this.deliveryCache.put(delivery.parcel(), delivery)));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,11 @@ public interface DeliveryRepository {

CompletableFuture<Void> save(Delivery delivery);

CompletableFuture<Optional<Delivery>> fetch(UUID parcel);
CompletableFuture<Optional<Delivery>> find(UUID parcel);

CompletableFuture<Integer> delete(UUID parcel);
CompletableFuture<Boolean> delete(UUID parcel);

CompletableFuture<Integer> deleteAll();

CompletableFuture<Optional<List<Delivery>>> fetchAll();
CompletableFuture<List<Delivery>> findAll();
}
Original file line number Diff line number Diff line change
Expand Up @@ -29,21 +29,21 @@ public CompletableFuture<Void> save(Delivery delivery) {
}

@Override
public CompletableFuture<Optional<Delivery>> fetch(UUID parcel) {
public CompletableFuture<Optional<Delivery>> find(UUID parcel) {
return this.selectSafe(DeliveryTable.class, parcel)
.thenApply(optional -> optional.map(DeliveryTable::toDelivery));
}

@Override
public CompletableFuture<Optional<List<Delivery>>> fetchAll() {
return this.selectAll(DeliveryTable.class).thenApply(parcels -> Optional.of(parcels.stream()
public CompletableFuture<List<Delivery>> findAll() {
return this.selectAll(DeliveryTable.class).thenApply(parcels -> parcels.stream()
.map(DeliveryTable::toDelivery)
.toList()));
.toList());
}

@Override
public CompletableFuture<Integer> delete(UUID parcel) {
return this.deleteById(DeliveryTable.class, parcel);
public CompletableFuture<Boolean> delete(UUID parcel) {
return this.deleteById(DeliveryTable.class, parcel).thenApply(i -> i > 0);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@
import com.eternalcode.parcellockers.locker.Locker;
import com.eternalcode.parcellockers.locker.LockerManager;
import com.eternalcode.parcellockers.parcel.Parcel;
import com.eternalcode.parcellockers.parcel.ParcelDispatchService;
import com.eternalcode.parcellockers.parcel.ParcelService;
import com.eternalcode.parcellockers.parcel.service.ParcelDispatchService;
import com.eternalcode.parcellockers.parcel.service.ParcelService;
import com.eternalcode.parcellockers.shared.Page;
import com.eternalcode.parcellockers.shared.PageResult;
import com.eternalcode.parcellockers.user.User;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -119,7 +119,7 @@ private void setupStaticItems(Player player, PaginatedGui gui) {
gui.setItem(49, closeItem);
}

// fixme: parcels not appearing when there are many deliveries?
// todo: check parcels not appearing when there are many deliveries?
private CompletableFuture<GuiItem> createParcelItemAsync(Parcel parcel, ConfigItem item) {
CompletableFuture<List<String>> loreFuture = PlaceholderUtil.replaceParcelPlaceholdersAsync(
parcel, item.lore(), this.guiManager
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ public CompletableFuture<Optional<Locker>> get(UUID uniqueId) {
return CompletableFuture.completedFuture(Optional.of(locker));
}

return this.lockerRepository.fetch(uniqueId).thenApply(optionalLocker -> {
return this.lockerRepository.find(uniqueId).thenApply(optionalLocker -> {
optionalLocker.ifPresent(locker1 -> {
this.lockersByUUID.put(locker1.uuid(), locker1);
this.lockersByPosition.put(locker1.position(), locker1);
Expand All @@ -78,7 +78,7 @@ public CompletableFuture<Optional<Locker>> get(Position position) {
return CompletableFuture.completedFuture(Optional.of(locker));
}

return this.lockerRepository.fetch(position).thenApply(optionalLocker -> {
return this.lockerRepository.find(position).thenApply(optionalLocker -> {
optionalLocker.ifPresent(locker1 -> {
this.lockersByUUID.put(locker1.uuid(), locker1);
this.lockersByPosition.put(locker1.position(), locker1);
Expand All @@ -93,21 +93,7 @@ public CompletableFuture<PageResult<Locker>> get(Page page) {
if (!cached.isEmpty() && page.getOffset() == 0 && !hasNextPage) {
return CompletableFuture.completedFuture(new PageResult<>(cached, false));
}
return this.lockerRepository.fetchPage(page);
}

public CompletableFuture<Locker> getOrCreate(UUID uniqueId, String name, Position position) {
Locker lockerByUUID = this.lockersByUUID.getIfPresent(uniqueId);
if (lockerByUUID != null) {
return CompletableFuture.completedFuture(lockerByUUID);
}

Locker lockerByPosition = this.lockersByPosition.getIfPresent(position);
if (lockerByPosition != null) {
return CompletableFuture.completedFuture(lockerByPosition);
}

return this.create(uniqueId, name, position);
return this.lockerRepository.findPage(page);
}

public CompletableFuture<Locker> create(UUID uniqueId, String name, Position position) {
Expand Down Expand Up @@ -158,8 +144,8 @@ public CompletableFuture<Void> deleteAll(CommandSender sender, NoticeService not
});
}

public CompletableFuture<Boolean> isLockerFull(UUID lockerUuid) {
return this.parcelRepository.countByDestinationLocker(lockerUuid)
public CompletableFuture<Boolean> isLockerFull(UUID uniqueId) {
return this.parcelRepository.countDeliveredParcelsByDestinationLocker(uniqueId)
.thenApply(count -> count > 0 && count >= this.config.settings.maxParcelsPerLocker);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
import com.eternalcode.parcellockers.shared.Page;
import com.eternalcode.parcellockers.shared.PageResult;
import com.eternalcode.parcellockers.shared.Position;
import java.util.List;
import java.util.Optional;
import java.util.UUID;
import java.util.concurrent.CompletableFuture;
Expand All @@ -13,17 +12,15 @@ public interface LockerRepository {

CompletableFuture<Locker> save(Locker locker);

CompletableFuture<Optional<List<Locker>>> fetchAll();
CompletableFuture<Optional<Locker>> find(UUID uuid);

CompletableFuture<Optional<Locker>> fetch(UUID uuid);

CompletableFuture<Optional<Locker>> fetch(Position position);
CompletableFuture<Optional<Locker>> find(Position position);

CompletableFuture<Integer> delete(UUID uuid);

CompletableFuture<Integer> delete(Locker locker);

CompletableFuture<Integer> deleteAll();

CompletableFuture<PageResult<Locker>> fetchPage(Page page);
CompletableFuture<PageResult<Locker>> findPage(Page page);
}
Original file line number Diff line number Diff line change
Expand Up @@ -34,19 +34,12 @@ public CompletableFuture<Locker> save(Locker locker) {
}

@Override
public CompletableFuture<Optional<List<Locker>>> fetchAll() {
return this.selectAll(LockerTable.class).thenApply(lockers -> Optional.of(lockers.stream()
.map(LockerTable::toLocker)
.collect(Collectors.toList())));
}

@Override
public CompletableFuture<Optional<Locker>> fetch(UUID uuid) {
public CompletableFuture<Optional<Locker>> find(UUID uuid) {
return this.selectSafe(LockerTable.class, uuid).thenApply(optional -> optional.map(LockerTable::toLocker));
}

@Override
public CompletableFuture<Optional<Locker>> fetch(Position position) {
public CompletableFuture<Optional<Locker>> find(Position position) {
return this.action(
LockerTable.class, dao -> {
List<LockerTable> lockers = dao.queryForEq("position", position);
Expand All @@ -65,7 +58,7 @@ public CompletableFuture<Integer> delete(Locker locker) {
}

@Override
public CompletableFuture<PageResult<Locker>> fetchPage(Page page) {
public CompletableFuture<PageResult<Locker>> findPage(Page page) {
return this.action(
LockerTable.class, dao -> {
List<Locker> lockers = dao.queryBuilder()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,27 +15,25 @@ public interface ParcelRepository {

CompletableFuture<Void> update(Parcel parcel);

CompletableFuture<Optional<List<Parcel>>> fetchAll();
CompletableFuture<List<Parcel>> findAll();

CompletableFuture<Optional<Parcel>> fetchById(UUID uuid);
CompletableFuture<Optional<Parcel>> findById(UUID uuid);

@TestOnly
CompletableFuture<Optional<List<Parcel>>> fetchBySender(UUID sender);
CompletableFuture<List<Parcel>> findBySender(UUID sender);

CompletableFuture<PageResult<Parcel>> fetchBySender(UUID sender, Page page);
CompletableFuture<PageResult<Parcel>> findBySender(UUID sender, Page page);

@TestOnly
CompletableFuture<Optional<List<Parcel>>> fetchByReceiver(UUID receiver);
CompletableFuture<List<Parcel>> findByReceiver(UUID receiver);

CompletableFuture<PageResult<Parcel>> fetchByReceiver(UUID receiver, Page page);
CompletableFuture<PageResult<Parcel>> findByReceiver(UUID receiver, Page page);

CompletableFuture<Integer> countByDestinationLocker(UUID destinationLocker);
CompletableFuture<Integer> countDeliveredParcelsByDestinationLocker(UUID destinationLocker);

CompletableFuture<Integer> delete(Parcel parcel);
CompletableFuture<Boolean> delete(Parcel parcel);

CompletableFuture<Integer> delete(UUID uuid);
CompletableFuture<Boolean> delete(UUID uuid);

CompletableFuture<Integer> deleteAll();

CompletableFuture<PageResult<Parcel>> fetchPage(Page page);
}
Loading