/
Chebarik
/
PackageManagement
Обзор
Документация
Войти
/
Chebarik
/
PackageManagement
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
src/main/java/com/packagemanagement/domain/model/PackageVersion.java
151 строка
4 KB
Николай Мехоношин
added domain layer entities and services
13 янв 2026, 20:38
13 янв 2026, 20:38
50e61ad
Код
Авторство
О чём код?
package com.packagemanagement.domain.model; import java.time.Instant; import java.util.Objects; import java.util.UUID; public class PackageVersion { private final String id; private final String versionNumber; private final Instant publishedDate; private final long size; private final String hash; private VersionStatus status; private PackageVersion(Builder builder) { this.id = builder.id; this.versionNumber = builder.versionNumber; this.publishedDate = builder.publishedDate; this.size = builder.size; this.hash = builder.hash; this.status = builder.status; } public static PackageVersion create(String versionNumber, long size, String hash) { return builder() .id(UUID.randomUUID().toString()) .versionNumber(versionNumber) .publishedDate(Instant.now()) .size(size) .hash(hash) .status(VersionStatus.DRAFT) .build(); } public static Builder builder() { return new Builder(); } public String getId() { return id; } public String getVersionNumber() { return versionNumber; } public Instant getPublishedDate() { return publishedDate; } public long getSize() { return size; } public String getHash() { return hash; } public VersionStatus getStatus() { return status; } public boolean isPublished() { return status == VersionStatus.PUBLISHED; } public boolean canBeDeleted() { return status.canBeDeleted(); } public void publish() { if (this.status == VersionStatus.ARCHIVED) { throw new IllegalStateException("Cannot publish an archived version"); } this.status = VersionStatus.PUBLISHED; } public void archive() { this.status = VersionStatus.ARCHIVED; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; PackageVersion that = (PackageVersion) o; return Objects.equals(id, that.id); } @Override public int hashCode() { return Objects.hash(id); } @Override public String toString() { return "PackageVersion{" + "id='" + id + '\'' + ", versionNumber='" + versionNumber + '\'' + ", status=" + status + '}'; } public static class Builder { private String id; private String versionNumber; private Instant publishedDate; private long size; private String hash; private VersionStatus status = VersionStatus.DRAFT; public Builder id(String id) { this.id = id; return this; } public Builder versionNumber(String versionNumber) { this.versionNumber = versionNumber; return this; } public Builder publishedDate(Instant publishedDate) { this.publishedDate = publishedDate; return this; } public Builder size(long size) { this.size = size; return this; } public Builder hash(String hash) { this.hash = hash; return this; } public Builder status(VersionStatus status) { this.status = status; return this; } public PackageVersion build() { Objects.requireNonNull(id, "id is required"); Objects.requireNonNull(versionNumber, "versionNumber is required"); Objects.requireNonNull(publishedDate, "publishedDate is required"); Objects.requireNonNull(hash, "hash is required"); return new PackageVersion(this); } } }