This commit is contained in:
2025-10-26 22:43:30 -04:00
parent 8cf15672d6
commit 1ee497dd99
50 changed files with 1243 additions and 0 deletions

41
Api/build.gradle Normal file
View File

@@ -0,0 +1,41 @@
/*
* This file was generated by the Gradle 'init' task.
*
*/
plugins {
// Apply the application plugin to add support for building a CLI application in Java.
id 'java'
id 'application'
}
// Apply a specific Java toolchain to ease working on different environments.
java {
toolchain {
languageVersion = JavaLanguageVersion.of(24)
}
}
application {
// Define the main class for the application.
mainClass = 'edu.inventorym.Api'
}
repositories {
// Use Maven Central for resolving dependencies.
mavenCentral()
}
dependencies {
implementation 'io.helidon:helidon:4.3.1'
implementation 'io.helidon.common:helidon-common:4.3.1'
implementation 'io.helidon.media:helidon-media-jsonb:3.2.12'
implementation 'io.helidon.media.jsonb:helidon-media-jsonb-common:1.4.16'
implementation 'io.helidon.media.jsonb:helidon-media-jsonb-server:1.4.16'
implementation 'jakarta.json.bind:jakarta.json.bind-api:3.0.1'
implementation 'io.helidon.webserver:helidon-webserver:4.3.1'
}

View File

@@ -0,0 +1,37 @@
package edu.inventorym;
public class Api {
public static void main(String[] args) {
}
void callerInterface(){
//@Comment
/*
1. Add new art object to the inventory. Your manager must check that the art is not already in the inventory before adding
2. Remove art object from the inventory
3. Return a list of all art objects from inventory
3. Add a new transaction object to the list manager is handling
4. Calculate and return transaction price
5. Complete transaction
6. Remove transaction object
7. Format and return transaction data in print format
8. Retrieve and return transactions based on:
• customer email
• transaction date
• transaction id
• art id
9. Update inventory file(s) on local system
10. Update transaction file(s) on local system
11. Any other functionality needed to support the above requirements
*/
}
}

View File

@@ -0,0 +1,13 @@
package edu.inventorym.model;
public class Customer {
String nameFirst;
String nameLast;
String mailing;
String phone;
String email;
public Customer(){}
}

View File

@@ -0,0 +1,5 @@
package edu.inventorym.model;
public class CustomerList {
}

View File

@@ -0,0 +1,5 @@
package edu.inventorym.model;
public class CustomerManager {
}

View File

@@ -0,0 +1,12 @@
package edu.inventorym.model;
public class Drawing extends InventoryPiece {
public String style;
public String technique;
public String category;
public Drawing() {
super(InventoryType.DRAWING);
}
}

View File

@@ -0,0 +1,15 @@
package edu.inventorym.model;
public class InvalidArtOperationException extends RuntimeException {
public InvalidArtOperationException(String message) {
super(message);
}
public InvalidArtOperationException(String message, Throwable cause) {
super(message, cause);
}
public InvalidArtOperationException(Throwable cause) {
super(cause);
}
}

View File

@@ -0,0 +1,17 @@
package edu.inventorym.model;
public class InvalidTransOperationException extends RuntimeException {
public InvalidTransOperationException(String message) {
super(message);
}
public InvalidTransOperationException(String message, Throwable cause) {
super(message, cause);
}
public InvalidTransOperationException(Throwable cause) {
super(cause);
}
}

View File

@@ -0,0 +1,17 @@
package edu.inventorym.model;
public class InvalidTransactionException extends RuntimeException {
public InvalidTransactionException(String message) {
super(message);
}
public InvalidTransactionException(String message, Throwable cause) {
super(message, cause);
}
public InvalidTransactionException(Throwable cause) {
super(cause);
}
}

View File

@@ -0,0 +1,9 @@
package edu.inventorym.model;
import java.util.ArrayList;
public class InventoryList extends ArrayList<InventoryPiece> {
public InventoryList() {
super();
}
}

View File

@@ -0,0 +1,25 @@
package edu.inventorym.model;
import java.util.EnumSet;
import java.util.Set;
public class InventoryManager {
final static InventoryManager INSTANCE = new InventoryManager();
public static InventoryManager getInstance() {
return INSTANCE;
}
public InventoryList INVENTORY = new InventoryList();
public CustomerList CUSTOMERS = new CustomerList();
public TransactionList TRANSACTIONS = new TransactionList();
private InventoryManager() {
}
public Set<InventoryType> getArtPieceTypes(){
return EnumSet.allOf(InventoryType.class);
}
}

View File

@@ -0,0 +1,84 @@
package edu.inventorym.model;
import java.time.ZonedDateTime;
public abstract class InventoryPiece {
public String Id;
public float price;
public ZonedDateTime created;
public String title;
/**
* max 500 characters
*/
public String description;
public String Author;
InventoryType iventoryType;
public InventoryPiece(InventoryType iventoryType) {
this.iventoryType = iventoryType;
this.created = ZonedDateTime.now();
this.Id = TransactionManager.generateTransactionRandomID(10);
}
public InventoryPiece() {
}
public Boolean isArt(InventoryPiece piece) {
return false;
}
public String getType() {
return this.iventoryType.toString();
};
public String getId() {
return Id;
}
public void setId(String id) {
Id = id;
}
public float getPrice() {
return price;
}
public void setPrice(float price) {
this.price = price;
}
public ZonedDateTime getCreated() {
return created;
}
public void setCreated(ZonedDateTime created) {
this.created = created;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public String getAuthor() {
return Author;
}
public void setAuthor(String author) {
Author = author;
}
}

View File

@@ -0,0 +1,5 @@
package edu.inventorym.model;
public enum InventoryType {
PAINTING, DRAWING, PRINT, SCULPTURE
}

View File

@@ -0,0 +1,14 @@
package edu.inventorym.model;
public class Painting extends InventoryPiece {
int height;
int width;
String style;
String technique;
String category;
public Painting (){
super(InventoryType.PAINTING);
}
}

View File

@@ -0,0 +1,11 @@
package edu.inventorym.model;
public class Print extends InventoryPiece {
String openEditionType;
String category;
public Print(){
super(InventoryType.PRINT);
}
}

View File

@@ -0,0 +1,12 @@
package edu.inventorym.model;
public class Sculpture extends InventoryPiece {
String material;
float weight;
public Sculpture (){
super(InventoryType.SCULPTURE);
}
}

View File

@@ -0,0 +1,8 @@
package edu.inventorym.model;
import java.time.ZonedDateTime;
public class Transaction {
ZonedDateTime created = ZonedDateTime.now();
ZonedDateTime completed = null;
}

View File

@@ -0,0 +1,5 @@
package edu.inventorym.model;
public class TransactionList {
}

View File

@@ -0,0 +1,14 @@
package edu.inventorym.model;
import java.security.SecureRandom;
import java.util.Base64;
public class TransactionManager {
final public static String generateTransactionRandomID(int byteLength) {
SecureRandom secureRandom = new SecureRandom();
byte[] bytes = new byte[byteLength];
secureRandom.nextBytes(bytes);
return Base64.getUrlEncoder().withoutPadding().encodeToString(bytes);
}
}

79
Api/uml/classdiagram.dot Normal file
View File

@@ -0,0 +1,79 @@
digraph ClassDiagram {
// Graph attributes
graph [
rankdir="BT",
splines=ortho,
fontname="Arial"
];
node [
fontname="Arial",
fontsize=10,
shape=record,
style=filled,
fillcolor=lightyellow
];
edge [
fontname="Arial",
fontsize=9
];
// --- Clusters for Packages ---
subgraph cluster_edu_inventorym {
label="edu.inventorym";
style=filled;
color=lightgrey;
node [style=filled, color=white];
Api [
label="{class Api|+ main(String[]): void\l+ callerInterface(): void\l}"
];
App [
label="{class App|+ main(String[]): void\l- routing(HttpRouting.Builder): void\l}"
];
RpcDeserializer [
label="{class RpcDeserializer|+ main(String[]): void\l+ mapJsonToObjectList(String, Class<T>): List<T>\l}"
];
}
subgraph cluster_edu_inventorym_model {
label="edu.inventorym.model";
style=filled;
color=lightgrey;
node [style=filled, color=white];
InventoryPiece [
// Inferred from RpcDeserializer.java
label="{interface\n«InventoryPiece»|+ getId(): int\l}"
];
Drawing [
// Inferred from RpcDeserializer.java
label="{class Drawing|+ getId(): int\l}"
];
}
// --- Relationships ---
// Inheritance (Drawing implements InventoryPiece)
InventoryPiece -> Drawing [
arrowhead=empty,
style=dashed,
label="implements"
];
// Associations (Dependencies)
RpcDeserializer -> Drawing [
arrowhead=vee,
style=dashed,
label="uses"
];
RpcDeserializer -> InventoryPiece [
arrowhead=vee,
style=dashed,
label="uses"
];
}