more entities

This commit is contained in:
2025-11-28 23:13:08 -05:00
parent 8120dafd6d
commit 873f0b552f
9 changed files with 820 additions and 4 deletions

View File

@@ -0,0 +1,65 @@
package group.goforward.ballistic.model;
import jakarta.persistence.*;
@Entity
@Table(name = "affiliate_category_map")
public class AffiliateCategoryMap {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", nullable = false)
private Integer id;
@Column(name = "feedname", nullable = false, length = 100)
private String feedname;
@Column(name = "affiliatecategory", nullable = false)
private String affiliatecategory;
@Column(name = "buildercategoryid", nullable = false)
private Integer buildercategoryid;
@Column(name = "notes")
private String notes;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getFeedname() {
return feedname;
}
public void setFeedname(String feedname) {
this.feedname = feedname;
}
public String getAffiliatecategory() {
return affiliatecategory;
}
public void setAffiliatecategory(String affiliatecategory) {
this.affiliatecategory = affiliatecategory;
}
public Integer getBuildercategoryid() {
return buildercategoryid;
}
public void setBuildercategoryid(Integer buildercategoryid) {
this.buildercategoryid = buildercategoryid;
}
public String getNotes() {
return notes;
}
public void setNotes(String notes) {
this.notes = notes;
}
}

View File

@@ -34,6 +34,17 @@ public class Brand {
@Column(name = "uuid")
private UUID uuid;
@Column(name = "url", length = Integer.MAX_VALUE)
private String url;
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public Integer getId() {
return id;
}

View File

@@ -0,0 +1,126 @@
package group.goforward.ballistic.model;
import jakarta.persistence.*;
import org.hibernate.annotations.ColumnDefault;
import java.time.OffsetDateTime;
@Entity
@Table(name = "feed_imports")
public class FeedImport {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", nullable = false)
private Long id;
@ManyToOne(fetch = FetchType.LAZY, optional = false)
@JoinColumn(name = "merchant_id", nullable = false)
private Merchant merchant;
@ColumnDefault("now()")
@Column(name = "started_at", nullable = false)
private OffsetDateTime startedAt;
@Column(name = "finished_at")
private OffsetDateTime finishedAt;
@Column(name = "rows_total")
private Integer rowsTotal;
@Column(name = "rows_processed")
private Integer rowsProcessed;
@Column(name = "rows_new")
private Integer rowsNew;
@Column(name = "rows_updated")
private Integer rowsUpdated;
@ColumnDefault("'running'")
@Column(name = "status", nullable = false, length = Integer.MAX_VALUE)
private String status;
@Column(name = "error_message", length = Integer.MAX_VALUE)
private String errorMessage;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public Merchant getMerchant() {
return merchant;
}
public void setMerchant(Merchant merchant) {
this.merchant = merchant;
}
public OffsetDateTime getStartedAt() {
return startedAt;
}
public void setStartedAt(OffsetDateTime startedAt) {
this.startedAt = startedAt;
}
public OffsetDateTime getFinishedAt() {
return finishedAt;
}
public void setFinishedAt(OffsetDateTime finishedAt) {
this.finishedAt = finishedAt;
}
public Integer getRowsTotal() {
return rowsTotal;
}
public void setRowsTotal(Integer rowsTotal) {
this.rowsTotal = rowsTotal;
}
public Integer getRowsProcessed() {
return rowsProcessed;
}
public void setRowsProcessed(Integer rowsProcessed) {
this.rowsProcessed = rowsProcessed;
}
public Integer getRowsNew() {
return rowsNew;
}
public void setRowsNew(Integer rowsNew) {
this.rowsNew = rowsNew;
}
public Integer getRowsUpdated() {
return rowsUpdated;
}
public void setRowsUpdated(Integer rowsUpdated) {
this.rowsUpdated = rowsUpdated;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public String getErrorMessage() {
return errorMessage;
}
public void setErrorMessage(String errorMessage) {
this.errorMessage = errorMessage;
}
}

View File

@@ -0,0 +1,93 @@
package group.goforward.ballistic.model;
import jakarta.persistence.*;
import org.hibernate.annotations.ColumnDefault;
import java.time.OffsetDateTime;
@Entity
@Table(name = "merchants")
public class Merchant {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", nullable = false)
private Integer id;
@Column(name = "name", nullable = false, length = Integer.MAX_VALUE)
private String name;
@Column(name = "avantlink_mid", nullable = false, length = Integer.MAX_VALUE)
private String avantlinkMid;
@Column(name = "feed_url", nullable = false, length = Integer.MAX_VALUE)
private String feedUrl;
@ColumnDefault("true")
@Column(name = "is_active", nullable = false)
private Boolean isActive = false;
@ColumnDefault("now()")
@Column(name = "created_at", nullable = false)
private OffsetDateTime createdAt;
@ColumnDefault("now()")
@Column(name = "updated_at", nullable = false)
private OffsetDateTime updatedAt;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAvantlinkMid() {
return avantlinkMid;
}
public void setAvantlinkMid(String avantlinkMid) {
this.avantlinkMid = avantlinkMid;
}
public String getFeedUrl() {
return feedUrl;
}
public void setFeedUrl(String feedUrl) {
this.feedUrl = feedUrl;
}
public Boolean getIsActive() {
return isActive;
}
public void setIsActive(Boolean isActive) {
this.isActive = isActive;
}
public OffsetDateTime getCreatedAt() {
return createdAt;
}
public void setCreatedAt(OffsetDateTime createdAt) {
this.createdAt = createdAt;
}
public OffsetDateTime getUpdatedAt() {
return updatedAt;
}
public void setUpdatedAt(OffsetDateTime updatedAt) {
this.updatedAt = updatedAt;
}
}

View File

@@ -0,0 +1,54 @@
package group.goforward.ballistic.model;
import jakarta.persistence.*;
@Entity
@Table(name = "part_categories")
public class PartCategory {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", nullable = false)
private Integer id;
@Column(name = "slug", nullable = false, length = Integer.MAX_VALUE)
private String slug;
@Column(name = "name", nullable = false, length = Integer.MAX_VALUE)
private String name;
@Column(name = "description", length = Integer.MAX_VALUE)
private String description;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getSlug() {
return slug;
}
public void setSlug(String slug) {
this.slug = slug;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
}

View File

@@ -0,0 +1,63 @@
package group.goforward.ballistic.model;
import jakarta.persistence.*;
import org.hibernate.annotations.ColumnDefault;
import org.hibernate.annotations.OnDelete;
import org.hibernate.annotations.OnDeleteAction;
import java.math.BigDecimal;
import java.time.OffsetDateTime;
@Entity
@Table(name = "price_history")
public class PriceHistory {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", nullable = false)
private Long id;
@ManyToOne(fetch = FetchType.LAZY, optional = false)
@OnDelete(action = OnDeleteAction.CASCADE)
@JoinColumn(name = "product_offer_id", nullable = false)
private ProductOffer productOffer;
@Column(name = "price", nullable = false, precision = 10, scale = 2)
private BigDecimal price;
@ColumnDefault("now()")
@Column(name = "recorded_at", nullable = false)
private OffsetDateTime recordedAt;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public ProductOffer getProductOffer() {
return productOffer;
}
public void setProductOffer(ProductOffer productOffer) {
this.productOffer = productOffer;
}
public BigDecimal getPrice() {
return price;
}
public void setPrice(BigDecimal price) {
this.price = price;
}
public OffsetDateTime getRecordedAt() {
return recordedAt;
}
public void setRecordedAt(OffsetDateTime recordedAt) {
this.recordedAt = recordedAt;
}
}

View File

@@ -1,9 +1,6 @@
package group.goforward.ballistic.model;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
import jakarta.persistence.Table;
import jakarta.persistence.*;
import org.hibernate.annotations.ColumnDefault;
import java.math.BigDecimal;
@@ -46,6 +43,153 @@ public class Product {
@Column(name = "deleted_at")
private Instant deletedAt;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "brand_id")
private Brand brand;
@ManyToOne(fetch = FetchType.LAZY, optional = false)
@JoinColumn(name = "part_category_id", nullable = false)
private PartCategory partCategory;
@Column(name = "slug", nullable = false, length = Integer.MAX_VALUE)
private String slug;
@Column(name = "caliber", length = Integer.MAX_VALUE)
private String caliber;
@Column(name = "barrel_length_mm")
private Integer barrelLengthMm;
@Column(name = "gas_system", length = Integer.MAX_VALUE)
private String gasSystem;
@Column(name = "handguard_length_mm")
private Integer handguardLengthMm;
@Column(name = "image_url", length = Integer.MAX_VALUE)
private String imageUrl;
@Column(name = "spec_sheet_url", length = Integer.MAX_VALUE)
private String specSheetUrl;
@Column(name = "msrp", precision = 10, scale = 2)
private BigDecimal msrp;
@Column(name = "current_lowest_price", precision = 10, scale = 2)
private BigDecimal currentLowestPrice;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "current_lowest_merchant_id")
private Merchant currentLowestMerchant;
@ColumnDefault("true")
@Column(name = "is_active", nullable = false)
private Boolean isActive = false;
public Boolean getIsActive() {
return isActive;
}
public void setIsActive(Boolean isActive) {
this.isActive = isActive;
}
public Merchant getCurrentLowestMerchant() {
return currentLowestMerchant;
}
public void setCurrentLowestMerchant(Merchant currentLowestMerchant) {
this.currentLowestMerchant = currentLowestMerchant;
}
public BigDecimal getCurrentLowestPrice() {
return currentLowestPrice;
}
public void setCurrentLowestPrice(BigDecimal currentLowestPrice) {
this.currentLowestPrice = currentLowestPrice;
}
public BigDecimal getMsrp() {
return msrp;
}
public void setMsrp(BigDecimal msrp) {
this.msrp = msrp;
}
public String getSpecSheetUrl() {
return specSheetUrl;
}
public void setSpecSheetUrl(String specSheetUrl) {
this.specSheetUrl = specSheetUrl;
}
public String getImageUrl() {
return imageUrl;
}
public void setImageUrl(String imageUrl) {
this.imageUrl = imageUrl;
}
public Integer getHandguardLengthMm() {
return handguardLengthMm;
}
public void setHandguardLengthMm(Integer handguardLengthMm) {
this.handguardLengthMm = handguardLengthMm;
}
public String getGasSystem() {
return gasSystem;
}
public void setGasSystem(String gasSystem) {
this.gasSystem = gasSystem;
}
public Integer getBarrelLengthMm() {
return barrelLengthMm;
}
public void setBarrelLengthMm(Integer barrelLengthMm) {
this.barrelLengthMm = barrelLengthMm;
}
public String getCaliber() {
return caliber;
}
public void setCaliber(String caliber) {
this.caliber = caliber;
}
public String getSlug() {
return slug;
}
public void setSlug(String slug) {
this.slug = slug;
}
public PartCategory getPartCategory() {
return partCategory;
}
public void setPartCategory(PartCategory partCategory) {
this.partCategory = partCategory;
}
public Brand getBrand() {
return brand;
}
public void setBrand(Brand brand) {
this.brand = brand;
}
public Integer getId() {
return id;
}

View File

@@ -0,0 +1,93 @@
package group.goforward.ballistic.model;
import jakarta.persistence.*;
import org.hibernate.annotations.ColumnDefault;
import java.time.Instant;
@Entity
@Table(name = "product_categories")
public class ProductCategory {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", nullable = false)
private Integer id;
@Column(name = "name", nullable = false, length = 100)
private String name;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "parent_category_id")
private ProductCategory parentCategory;
@Column(name = "type", length = 50)
private String type;
@Column(name = "sort_order")
private Integer sortOrder;
@ColumnDefault("now()")
@Column(name = "created_at")
private Instant createdAt;
@ColumnDefault("now()")
@Column(name = "updated_at")
private Instant updatedAt;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public ProductCategory getParentCategory() {
return parentCategory;
}
public void setParentCategory(ProductCategory parentCategory) {
this.parentCategory = parentCategory;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public Integer getSortOrder() {
return sortOrder;
}
public void setSortOrder(Integer sortOrder) {
this.sortOrder = sortOrder;
}
public Instant getCreatedAt() {
return createdAt;
}
public void setCreatedAt(Instant createdAt) {
this.createdAt = createdAt;
}
public Instant getUpdatedAt() {
return updatedAt;
}
public void setUpdatedAt(Instant updatedAt) {
this.updatedAt = updatedAt;
}
}

View File

@@ -0,0 +1,167 @@
package group.goforward.ballistic.model;
import jakarta.persistence.*;
import org.hibernate.annotations.ColumnDefault;
import org.hibernate.annotations.OnDelete;
import org.hibernate.annotations.OnDeleteAction;
import java.math.BigDecimal;
import java.time.OffsetDateTime;
import java.util.UUID;
@Entity
@Table(name = "product_offers")
public class ProductOffer {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id", nullable = false)
private UUID id;
@ManyToOne(fetch = FetchType.LAZY, optional = false)
@OnDelete(action = OnDeleteAction.CASCADE)
@JoinColumn(name = "product_id", nullable = false)
private Product product;
@ManyToOne(fetch = FetchType.LAZY, optional = false)
@JoinColumn(name = "merchant_id", nullable = false)
private Merchant merchant;
@Column(name = "avantlink_product_id", nullable = false, length = Integer.MAX_VALUE)
private String avantlinkProductId;
@Column(name = "sku", length = Integer.MAX_VALUE)
private String sku;
@Column(name = "upc", length = Integer.MAX_VALUE)
private String upc;
@Column(name = "buy_url", nullable = false, length = Integer.MAX_VALUE)
private String buyUrl;
@Column(name = "price", nullable = false, precision = 10, scale = 2)
private BigDecimal price;
@Column(name = "original_price", precision = 10, scale = 2)
private BigDecimal originalPrice;
@ColumnDefault("'USD'")
@Column(name = "currency", nullable = false, length = Integer.MAX_VALUE)
private String currency;
@ColumnDefault("true")
@Column(name = "in_stock", nullable = false)
private Boolean inStock = false;
@ColumnDefault("now()")
@Column(name = "last_seen_at", nullable = false)
private OffsetDateTime lastSeenAt;
@ColumnDefault("now()")
@Column(name = "first_seen_at", nullable = false)
private OffsetDateTime firstSeenAt;
public UUID getId() {
return id;
}
public void setId(UUID id) {
this.id = id;
}
public Product getProduct() {
return product;
}
public void setProduct(Product product) {
this.product = product;
}
public Merchant getMerchant() {
return merchant;
}
public void setMerchant(Merchant merchant) {
this.merchant = merchant;
}
public String getAvantlinkProductId() {
return avantlinkProductId;
}
public void setAvantlinkProductId(String avantlinkProductId) {
this.avantlinkProductId = avantlinkProductId;
}
public String getSku() {
return sku;
}
public void setSku(String sku) {
this.sku = sku;
}
public String getUpc() {
return upc;
}
public void setUpc(String upc) {
this.upc = upc;
}
public String getBuyUrl() {
return buyUrl;
}
public void setBuyUrl(String buyUrl) {
this.buyUrl = buyUrl;
}
public BigDecimal getPrice() {
return price;
}
public void setPrice(BigDecimal price) {
this.price = price;
}
public BigDecimal getOriginalPrice() {
return originalPrice;
}
public void setOriginalPrice(BigDecimal originalPrice) {
this.originalPrice = originalPrice;
}
public String getCurrency() {
return currency;
}
public void setCurrency(String currency) {
this.currency = currency;
}
public Boolean getInStock() {
return inStock;
}
public void setInStock(Boolean inStock) {
this.inStock = inStock;
}
public OffsetDateTime getLastSeenAt() {
return lastSeenAt;
}
public void setLastSeenAt(OffsetDateTime lastSeenAt) {
this.lastSeenAt = lastSeenAt;
}
public OffsetDateTime getFirstSeenAt() {
return firstSeenAt;
}
public void setFirstSeenAt(OffsetDateTime firstSeenAt) {
this.firstSeenAt = firstSeenAt;
}
}