Merge pull request 'fix: style guide compliance batch 1 + date segment type' (#83) from fix-style-guide-batch-1 into main
Reviewed-on: #83
This commit was merged in pull request #83.
This commit is contained in:
@@ -6,6 +6,7 @@ import (
|
||||
"fmt"
|
||||
"regexp"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/kindredsystems/silo/internal/schema"
|
||||
)
|
||||
@@ -99,8 +100,11 @@ func (g *Generator) resolveSegment(
|
||||
return g.formatSerial(seg, next), nil
|
||||
|
||||
case "date":
|
||||
// TODO: implement date formatting
|
||||
return "", fmt.Errorf("date segments not yet implemented")
|
||||
layout := seg.Value
|
||||
if layout == "" {
|
||||
layout = "20060102"
|
||||
}
|
||||
return time.Now().UTC().Format(layout), nil
|
||||
|
||||
default:
|
||||
return "", fmt.Errorf("unknown segment type: %s", seg.Type)
|
||||
|
||||
@@ -3,7 +3,9 @@ package partnum
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"regexp"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/kindredsystems/silo/internal/schema"
|
||||
)
|
||||
@@ -165,3 +167,87 @@ func TestGenerateConstantSegment(t *testing.T) {
|
||||
t.Errorf("got %q, want %q", pn, "KS-0001")
|
||||
}
|
||||
}
|
||||
|
||||
func TestGenerateDateSegmentDefault(t *testing.T) {
|
||||
s := &schema.Schema{
|
||||
Name: "date-test",
|
||||
Version: 1,
|
||||
Separator: "-",
|
||||
Segments: []schema.Segment{
|
||||
{Name: "date", Type: "date"},
|
||||
{Name: "serial", Type: "serial", Length: 3},
|
||||
},
|
||||
}
|
||||
gen := NewGenerator(map[string]*schema.Schema{"date-test": s}, &mockSeqStore{})
|
||||
|
||||
pn, err := gen.Generate(context.Background(), Input{
|
||||
SchemaName: "date-test",
|
||||
Values: map[string]string{},
|
||||
})
|
||||
if err != nil {
|
||||
t.Fatalf("Generate returned error: %v", err)
|
||||
}
|
||||
|
||||
// Default format: YYYYMMDD-NNN
|
||||
want := time.Now().UTC().Format("20060102") + "-001"
|
||||
if pn != want {
|
||||
t.Errorf("got %q, want %q", pn, want)
|
||||
}
|
||||
}
|
||||
|
||||
func TestGenerateDateSegmentCustomFormat(t *testing.T) {
|
||||
s := &schema.Schema{
|
||||
Name: "date-custom",
|
||||
Version: 1,
|
||||
Separator: "-",
|
||||
Segments: []schema.Segment{
|
||||
{Name: "date", Type: "date", Value: "0601"},
|
||||
{Name: "serial", Type: "serial", Length: 4},
|
||||
},
|
||||
}
|
||||
gen := NewGenerator(map[string]*schema.Schema{"date-custom": s}, &mockSeqStore{})
|
||||
|
||||
pn, err := gen.Generate(context.Background(), Input{
|
||||
SchemaName: "date-custom",
|
||||
Values: map[string]string{},
|
||||
})
|
||||
if err != nil {
|
||||
t.Fatalf("Generate returned error: %v", err)
|
||||
}
|
||||
|
||||
// Format "0601" produces YYMM
|
||||
if matched, _ := regexp.MatchString(`^\d{4}-\d{4}$`, pn); !matched {
|
||||
t.Errorf("got %q, want pattern YYMM-NNNN", pn)
|
||||
}
|
||||
|
||||
want := time.Now().UTC().Format("0601") + "-0001"
|
||||
if pn != want {
|
||||
t.Errorf("got %q, want %q", pn, want)
|
||||
}
|
||||
}
|
||||
|
||||
func TestGenerateDateSegmentYearOnly(t *testing.T) {
|
||||
s := &schema.Schema{
|
||||
Name: "date-year",
|
||||
Version: 1,
|
||||
Separator: "-",
|
||||
Segments: []schema.Segment{
|
||||
{Name: "year", Type: "date", Value: "2006"},
|
||||
{Name: "serial", Type: "serial", Length: 4},
|
||||
},
|
||||
}
|
||||
gen := NewGenerator(map[string]*schema.Schema{"date-year": s}, &mockSeqStore{})
|
||||
|
||||
pn, err := gen.Generate(context.Background(), Input{
|
||||
SchemaName: "date-year",
|
||||
Values: map[string]string{},
|
||||
})
|
||||
if err != nil {
|
||||
t.Fatalf("Generate returned error: %v", err)
|
||||
}
|
||||
|
||||
want := time.Now().UTC().Format("2006") + "-0001"
|
||||
if pn != want {
|
||||
t.Errorf("got %q, want %q", pn, want)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -64,9 +64,11 @@ export function ItemDetail({
|
||||
}
|
||||
|
||||
const typeColors: Record<string, { bg: string; color: string }> = {
|
||||
part: { bg: "rgba(137,180,250,0.2)", color: "var(--ctp-blue)" },
|
||||
assembly: { bg: "rgba(166,227,161,0.2)", color: "var(--ctp-green)" },
|
||||
document: { bg: "rgba(249,226,175,0.2)", color: "var(--ctp-yellow)" },
|
||||
part: { bg: "rgba(166,227,161,0.2)", color: "var(--ctp-green)" },
|
||||
assembly: { bg: "rgba(203,166,247,0.2)", color: "var(--ctp-mauve)" },
|
||||
document: { bg: "rgba(137,180,250,0.2)", color: "var(--ctp-blue)" },
|
||||
purchased: { bg: "rgba(250,179,135,0.2)", color: "var(--ctp-peach)" },
|
||||
phantom: { bg: "rgba(127,132,156,0.2)", color: "var(--ctp-overlay1)" },
|
||||
tooling: { bg: "rgba(243,139,168,0.2)", color: "var(--ctp-red)" },
|
||||
};
|
||||
const tc = typeColors[item.item_type] ?? {
|
||||
|
||||
@@ -49,9 +49,11 @@ interface ItemTableProps {
|
||||
}
|
||||
|
||||
const typeColors: Record<string, { bg: string; color: string }> = {
|
||||
part: { bg: "rgba(137,180,250,0.2)", color: "var(--ctp-blue)" },
|
||||
assembly: { bg: "rgba(166,227,161,0.2)", color: "var(--ctp-green)" },
|
||||
document: { bg: "rgba(249,226,175,0.2)", color: "var(--ctp-yellow)" },
|
||||
part: { bg: "rgba(166,227,161,0.2)", color: "var(--ctp-green)" },
|
||||
assembly: { bg: "rgba(203,166,247,0.2)", color: "var(--ctp-mauve)" },
|
||||
document: { bg: "rgba(137,180,250,0.2)", color: "var(--ctp-blue)" },
|
||||
purchased: { bg: "rgba(250,179,135,0.2)", color: "var(--ctp-peach)" },
|
||||
phantom: { bg: "rgba(127,132,156,0.2)", color: "var(--ctp-overlay1)" },
|
||||
tooling: { bg: "rgba(243,139,168,0.2)", color: "var(--ctp-red)" },
|
||||
};
|
||||
|
||||
|
||||
@@ -1,51 +1,54 @@
|
||||
@import './theme.css';
|
||||
@import "./theme.css";
|
||||
|
||||
*,
|
||||
*::before,
|
||||
*::after {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
box-sizing: border-box;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
body {
|
||||
font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
|
||||
background-color: var(--ctp-base);
|
||||
color: var(--ctp-text);
|
||||
line-height: 1.6;
|
||||
min-height: 100vh;
|
||||
font-family:
|
||||
-apple-system, BlinkMacSystemFont, "Segoe UI", system-ui, sans-serif;
|
||||
background-color: var(--ctp-base);
|
||||
color: var(--ctp-text);
|
||||
line-height: 1.6;
|
||||
min-height: 100vh;
|
||||
}
|
||||
|
||||
a {
|
||||
color: var(--ctp-sapphire);
|
||||
text-decoration: none;
|
||||
color: var(--ctp-sapphire);
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
a:hover {
|
||||
color: var(--ctp-sky);
|
||||
text-decoration: underline;
|
||||
color: var(--ctp-sky);
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
/* Scrollbar */
|
||||
::-webkit-scrollbar {
|
||||
width: 8px;
|
||||
height: 8px;
|
||||
width: 8px;
|
||||
height: 8px;
|
||||
}
|
||||
|
||||
::-webkit-scrollbar-track {
|
||||
background: var(--ctp-mantle);
|
||||
background: var(--ctp-mantle);
|
||||
}
|
||||
|
||||
::-webkit-scrollbar-thumb {
|
||||
background: var(--ctp-surface1);
|
||||
border-radius: 4px;
|
||||
background: var(--ctp-surface1);
|
||||
border-radius: 4px;
|
||||
}
|
||||
|
||||
::-webkit-scrollbar-thumb:hover {
|
||||
background: var(--ctp-surface2);
|
||||
background: var(--ctp-surface2);
|
||||
}
|
||||
|
||||
/* Monospace */
|
||||
code, pre, .mono {
|
||||
font-family: 'JetBrains Mono', 'Fira Code', monospace;
|
||||
code,
|
||||
pre,
|
||||
.mono {
|
||||
font-family: "JetBrains Mono", "Fira Code", monospace;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user