interface Assets {
id: string;
itemId: string;
url: string;
key: string;
}
interface Content {
id: string;
Url: string;
Type: string;
}
interface Property {
[key: string]: string;
}
interface installedContentPack{
contentPackId: string
}
interface ItemProperty extends Property {
contentPackVersion?: string | null;
contentPackIconId?: string | null;
contentPackChangeLog?: string | null;
/**
* Estos atributos quedarian en desuso.
* Reemplazados con atributos directos y relaciones.
*/
parentItemId?: string;
recycled?: boolean;
shared?: boolean;
originalItemId?: string;
installedContentPackIds?: InstalledContentPackId[];
contentPackIds?: {
[key: string]: string
};
isContentPack?: boolean;
}
export enum ItemType {
adventure = "adventure",
contentpack = "contentpack",
}
interface Item {
id: string;
Type: string;
Title: string;
Description: string;
ContentType: ItemType;
DisplayProperties: ItemProperty;
isClone: boolean;
cloneItemId: string;
cover?: Assets;
screenShots: Assets[];
dependency: ItemDependency[];
updatedAt: string;
createdAt: string;
/* De permitirse eliminar items, sera solo Soft delete */
deletedAt: string;
/* Se podrá enlazar los nuevos Items con ItemPermission | Contribution module */
permissions: ItemPermission[];
}
/**
* Es deseable tener las dependencias guardadas en base de datos.
* De esta manera al publicar un item, se realizara la publicación de la dependencia
* de forma automatica
**/
interface ItemDependency {
id: string;
itemId: string;
childId: string;
installed: boolean;
}
/**
* El status "dependency" significa que fue publicado
* (generando una nueva versión) ya que era la dependencia de un item
* publicado. De esta manera cada Item publicado tendra su copia de
* todas las dependencias, aunque esto implique tener items duplicados.
*
* En versiones futuras podemos incluir un sistema de control que valide si
* el item a cambiado con respecto a la última versión publicada,
* para así utilizarla en caso que sea exactamente la misma.
*
**/
enum PublishItemStatus {
Active: 'active'
Inactive: 'inactive'
Dependency: 'dependency'
}
interface PublishItem extends Item {
price: number;
parentItem: itemId;
version: number;
status: PublishItemStatus;
}
## Puntos de entrada claves | relevantes
- CRUD `/me/items`
- POST `/me/items/:id/publish`
- POST `/me/items/:id/media/cover`
- POST `/me/items/:id/media/screenshot`
- POST `/me/items/:id/duplicate`
- INDEX & SHOW `/me/items/publishedItems`
- PUT `/me/publishedItems/:id/desactivate`
- PUT `/me/publishedItems/:id/activate`
- GET PAGINADO `/store/publishedItems?type=ADV|CP`
- POST `/store/publishedItems/:id/buy`
- GET PAGINADO `/me/purchases?type=ADV|CP`
## Importante
- No nececitamos uploadUrls(). Podemos definir campos multimedia personalizados.
- Queremos aprovechar para cambiar el casing de los items?
- No se permitirá eliminar p modificar PublishItem, solo desactivarlo para evitar ventas futuras.
- Podemos usar AWS S3 si queremos.
- Engs sync: Only publiched content packs can be used in a Draft (Item)
## Mecanismos backend
- Al publicar, primero se ganantizaría la creación del PublishItem, y luego el producto en Oncade para ser enlazado.
- Se puede tener un cronjob que revise posibles items publicados que no tienen su OncadeProduct listo.
- Se creará un proceso para tomar un UGC y migrarlo al sistema nuevo. De esta manera Adventure Forge podrá gestionar el proceso de migración.
Last active
November 10, 2025 14:47
-
-
Save Luiyit/c173d8ecba8a6775d0c78fc0c8467b89 to your computer and use it in GitHub Desktop.
Plan de migración UGC
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment