Modulo makers3d desarrollado con codex V 0.0.1
This commit is contained in:
@@ -0,0 +1,4 @@
|
||||
export * from "./lib/catalogs.js";
|
||||
export * from "./lib/maker.js";
|
||||
export * from "./lib/types.js";
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
export const serviceCategories = [
|
||||
"Impresion FDM",
|
||||
"Impresion Resina",
|
||||
"Diseno 3D",
|
||||
"Escaneo 3D",
|
||||
"Prototipado",
|
||||
"Produccion corta"
|
||||
] as const;
|
||||
|
||||
export const materialOptions = [
|
||||
"PLA",
|
||||
"PETG",
|
||||
"ABS",
|
||||
"TPU",
|
||||
"Resina estandar",
|
||||
"Resina alta definicion",
|
||||
"Nylon"
|
||||
] as const;
|
||||
|
||||
export const provinceOptions = [
|
||||
"Buenos Aires",
|
||||
"CABA",
|
||||
"Cordoba",
|
||||
"Santa Fe",
|
||||
"Mendoza"
|
||||
] as const;
|
||||
|
||||
@@ -0,0 +1,31 @@
|
||||
import test from "node:test";
|
||||
import assert from "node:assert/strict";
|
||||
|
||||
import { buildPublishChecklist, isPublishReady, maskCoordinates, slugify } from "./maker.js";
|
||||
|
||||
test("slugify crea slugs sencillos", () => {
|
||||
assert.equal(slugify("Maker Córdoba 3D"), "maker-cordoba-3d");
|
||||
});
|
||||
|
||||
test("maskCoordinates protege precision", () => {
|
||||
assert.deepEqual(maskCoordinates(-34.603722, -58.381592), {
|
||||
latitude: -34.6,
|
||||
longitude: -58.38
|
||||
});
|
||||
});
|
||||
|
||||
test("isPublishReady solo devuelve true si todo esta completo", () => {
|
||||
const checklist = buildPublishChecklist({
|
||||
businessName: "Maker Demo",
|
||||
description: "Servicio",
|
||||
province: "CABA",
|
||||
city: "Buenos Aires",
|
||||
servicesCount: 1,
|
||||
worksCount: 1,
|
||||
publicContactEmail: "demo@maker.com",
|
||||
subscriptionStatus: "active"
|
||||
});
|
||||
|
||||
assert.equal(isPublishReady(checklist), true);
|
||||
});
|
||||
|
||||
@@ -0,0 +1,45 @@
|
||||
import type { PublishChecklist } from "./types.js";
|
||||
|
||||
export function slugify(value: string): string {
|
||||
return value
|
||||
.normalize("NFD")
|
||||
.replace(/[\u0300-\u036f]/g, "")
|
||||
.toLowerCase()
|
||||
.trim()
|
||||
.replace(/[^a-z0-9]+/g, "-")
|
||||
.replace(/^-+|-+$/g, "")
|
||||
.slice(0, 60);
|
||||
}
|
||||
|
||||
export function maskCoordinates(latitude: number, longitude: number): { latitude: number; longitude: number } {
|
||||
const roundedLat = Number(latitude.toFixed(2));
|
||||
const roundedLng = Number(longitude.toFixed(2));
|
||||
return { latitude: roundedLat, longitude: roundedLng };
|
||||
}
|
||||
|
||||
export function buildPublishChecklist(input: {
|
||||
businessName?: string | null;
|
||||
description?: string | null;
|
||||
province?: string | null;
|
||||
city?: string | null;
|
||||
servicesCount: number;
|
||||
worksCount: number;
|
||||
publicContactEmail?: string | null;
|
||||
publicWhatsapp?: string | null;
|
||||
subscriptionStatus?: string | null;
|
||||
}): PublishChecklist {
|
||||
return {
|
||||
hasBusinessName: Boolean(input.businessName?.trim()),
|
||||
hasDescription: Boolean(input.description?.trim()),
|
||||
hasLocation: Boolean(input.province?.trim() && input.city?.trim()),
|
||||
hasService: input.servicesCount > 0,
|
||||
hasWork: input.worksCount > 0,
|
||||
hasContact: Boolean(input.publicContactEmail?.trim() || input.publicWhatsapp?.trim()),
|
||||
hasSubscription: input.subscriptionStatus === "active"
|
||||
};
|
||||
}
|
||||
|
||||
export function isPublishReady(checklist: PublishChecklist): boolean {
|
||||
return Object.values(checklist).every(Boolean);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
export type MakerStatus = "draft" | "published" | "suspended";
|
||||
export type Availability = "available" | "limited" | "unavailable";
|
||||
export type InquiryStatus = "open" | "rejected" | "completed";
|
||||
export type SubscriptionStatus = "inactive" | "pending" | "active" | "grace" | "cancelled";
|
||||
|
||||
export type PublishChecklist = {
|
||||
hasBusinessName: boolean;
|
||||
hasDescription: boolean;
|
||||
hasLocation: boolean;
|
||||
hasService: boolean;
|
||||
hasWork: boolean;
|
||||
hasContact: boolean;
|
||||
hasSubscription: boolean;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user