33 lines
747 B
Go
33 lines
747 B
Go
package missioncode
|
|
|
|
import (
|
|
"fmt"
|
|
"strconv"
|
|
"strings"
|
|
"time"
|
|
)
|
|
|
|
const (
|
|
prefixStatic = "M-"
|
|
suffixWidth = 3
|
|
)
|
|
|
|
// BuildPrefix returns the daily mission code prefix, e.g. M-042426-
|
|
func BuildPrefix(t time.Time) string {
|
|
return prefixStatic + t.Format("010206") + "-"
|
|
}
|
|
|
|
// NextFromLatest returns next code in sequence using latest code for a day.
|
|
// If latest is empty/invalid, sequence starts from 001.
|
|
func NextFromLatest(prefix string, latest string) string {
|
|
next := 1
|
|
latest = strings.TrimSpace(latest)
|
|
if strings.HasPrefix(latest, prefix) {
|
|
suffix := strings.TrimPrefix(latest, prefix)
|
|
if n, err := strconv.Atoi(suffix); err == nil && n > 0 {
|
|
next = n + 1
|
|
}
|
|
}
|
|
return fmt.Sprintf("%s%0*d", prefix, suffixWidth, next)
|
|
}
|