diff --git a/core/src/main/java/de/srsoftware/umbrella/core/model/Property.java b/core/src/main/java/de/srsoftware/umbrella/core/model/Property.java index 284d326..87f83bd 100644 --- a/core/src/main/java/de/srsoftware/umbrella/core/model/Property.java +++ b/core/src/main/java/de/srsoftware/umbrella/core/model/Property.java @@ -1,7 +1,6 @@ /* © SRSoftware 2025 */ package de.srsoftware.umbrella.core.model; -import static de.srsoftware.tools.Optionals.nullable; import static de.srsoftware.umbrella.core.Constants.*; import de.srsoftware.tools.Mappable; @@ -45,4 +44,9 @@ public class Property implements Mappable { if (unit != null) map.put(UNIT,unit); return map; } + + public Property value(Object newVal){ + value = newVal; + return this; + } } diff --git a/frontend/src/routes/stock/Index.svelte b/frontend/src/routes/stock/Index.svelte index 3716eb9..37d1dfb 100644 --- a/frontend/src/routes/stock/Index.svelte +++ b/frontend/src/routes/stock/Index.svelte @@ -35,6 +35,7 @@ var json = await res.json(); var dict = {} for (var entry of json.sort((a,b) => b.id - a.id)) dict[entry.name+'.'+entry.unit] = entry; + properties = null; properties = Object.values(dict).sort((a,b) => a.name.localeCompare(b.name)); yikes(); } else error(res); diff --git a/frontend/src/routes/stock/ItemProps.svelte b/frontend/src/routes/stock/ItemProps.svelte index 9758e91..d95449f 100644 --- a/frontend/src/routes/stock/ItemProps.svelte +++ b/frontend/src/routes/stock/ItemProps.svelte @@ -14,6 +14,10 @@ } }); + function byName(a,b){ + return a.name.localeCompare(b.name); + } + async function onclick(){ const url = api('stock/property'); const data = { @@ -29,6 +33,10 @@ body:JSON.stringify(data) }); if (res.ok){ + const prop = await res.json(); + const id = prop.id; + item.properties = item.properties.filter(p => p.id != id); + item.properties.push(prop); yikes(); } else error(res); } @@ -39,7 +47,7 @@
|
{prop.name}
diff --git a/markdown/src/main/java/de/srsoftware/umbrella/markdown/MarkdownApi.java b/markdown/src/main/java/de/srsoftware/umbrella/markdown/MarkdownApi.java
index 4e11a54..c71b9c3 100644
--- a/markdown/src/main/java/de/srsoftware/umbrella/markdown/MarkdownApi.java
+++ b/markdown/src/main/java/de/srsoftware/umbrella/markdown/MarkdownApi.java
@@ -6,15 +6,12 @@ import static de.srsoftware.umbrella.core.ModuleRegistry.userService;
import com.sun.net.httpserver.HttpExchange;
import de.srsoftware.tools.Path;
-import de.srsoftware.tools.SessionToken;
import de.srsoftware.umbrella.core.BaseHandler;
import de.srsoftware.umbrella.core.ModuleRegistry;
import de.srsoftware.umbrella.core.Util;
import de.srsoftware.umbrella.core.api.MarkdownService;
import de.srsoftware.umbrella.core.exceptions.UmbrellaException;
-import de.srsoftware.umbrella.core.model.Token;
import java.io.IOException;
-import java.util.Optional;
public class MarkdownApi extends BaseHandler implements MarkdownService {
diff --git a/stock/src/main/java/de/srsoftware/umbrella/stock/SqliteDb.java b/stock/src/main/java/de/srsoftware/umbrella/stock/SqliteDb.java
index b42d3e1..11466b5 100644
--- a/stock/src/main/java/de/srsoftware/umbrella/stock/SqliteDb.java
+++ b/stock/src/main/java/de/srsoftware/umbrella/stock/SqliteDb.java
@@ -51,17 +51,34 @@ public class SqliteDb extends BaseDb implements StockDb {
}
@Override
- public void addProperty(long ownerId, long itemId, long existingPropId, Object value) {
+ public Property addProperty(long ownerId, long itemId, long existingPropId, Object value) {
try {
- insertInto(TABLE_ITEM_PROPERTIES,OWNER,ITEM_ID,PROPERTY_ID,VALUE).values(ownerId,itemId,existingPropId,value).execute(db);
+ Property prop = null;
+ var rs = select(ALL).from(TABLE_PROPERTIES).where(ID,equal(existingPropId)).exec(db);
+ if (rs.next()) prop = Property.of(rs);
+ rs.close();
+ if (prop == null) throw databaseException("Failed to add new property to item {0}",itemId);
+ replaceInto(TABLE_ITEM_PROPERTIES,OWNER,ITEM_ID,PROPERTY_ID,VALUE).values(ownerId,itemId,existingPropId,value).execute(db);
+ return prop.value(value);
} catch (SQLException e) {
throw databaseException("Failed to add new property to item {0}",itemId);
}
}
@Override
- public void addProperty(long ownerId, long itemId, String name, Object value, String unit) {
- // TODO
+ public Property addNewProperty(long ownerId, long itemId, String name, Object value, String unit) {
+ try {
+ db.setAutoCommit(false);
+ var rs = insertInto(TABLE_PROPERTIES,NAME,TYPE,UNIT).values(name,0,unit).execute(db).getGeneratedKeys();
+ Long propertyId = null;
+ if (rs.next()) propertyId = rs.getLong(1);
+ rs.close();
+ if (propertyId == null || propertyId == 0) throw databaseException("Failed to create new property {0} to DB",name);
+ insertInto(TABLE_ITEM_PROPERTIES,OWNER,ITEM_ID,PROPERTY_ID,VALUE).values(ownerId,itemId,propertyId,value).execute(db);
+ return new Property(propertyId,name,value,unit);
+ } catch (SQLException e) {
+ throw databaseException("Failed to create new property {0} to DB",name);
+ }
}
private void createIntermediateItemsTable() throws SQLException { // create intermediate table
diff --git a/stock/src/main/java/de/srsoftware/umbrella/stock/StockDb.java b/stock/src/main/java/de/srsoftware/umbrella/stock/StockDb.java
index 5233795..cc8d929 100644
--- a/stock/src/main/java/de/srsoftware/umbrella/stock/StockDb.java
+++ b/stock/src/main/java/de/srsoftware/umbrella/stock/StockDb.java
@@ -2,12 +2,11 @@
package de.srsoftware.umbrella.stock;
import de.srsoftware.umbrella.core.model.*;
-
import java.util.Collection;
public interface StockDb {
- void addProperty(long ownerId, long itemId, long existingPropId, Object value);
- void addProperty(long ownerId, long itemId, String name, Object value, String unit);
+ Property addProperty(long ownerId, long itemId, long existingPropId, Object value);
+ Property addNewProperty(long ownerId, long itemId, String name, Object value, String unit);
Collection |