wms-be/pkg/utils/conv.go

94 lines
2.0 KiB
Go

package utils
import (
"strconv"
"time"
"github.com/google/uuid"
"golang.org/x/crypto/bcrypt"
)
func HashPassword(password string) (string, error) {
bytes, err := bcrypt.GenerateFromPassword([]byte(password), 14)
return string(bytes), err
}
func CheckPasswordHash(password, hash string) bool {
err := bcrypt.CompareHashAndPassword([]byte(hash), []byte(password))
return err == nil
}
func StringToUint(s string) uint {
id, err := strconv.ParseUint(s, 10, 64)
if err != nil {
return 0
}
return uint(id)
}
func ParseInt(s string) int {
i, err := strconv.Atoi(s)
if err != nil {
return 0
}
return i
}
func ParseNullableUUID(s *string) *uuid.UUID {
if s == nil || *s == "" {
return nil
}
id := ParseUUID(*s)
return &id
}
func ParseUUID(s string) uuid.UUID {
id, err := uuid.Parse(s)
if err != nil {
return uuid.Nil
}
return id
}
// StringToDate parses a string to time.Time with layout "2006-01-02"
func StringToDate(s string) time.Time {
if t, err := time.Parse("2006-01-02", s); err == nil {
now := time.Now()
// Gabungkan tanggal dari input dengan jam:menit:detik dari waktu sekarang
return time.Date(
t.Year(), t.Month(), t.Day(),
now.Hour(), now.Minute(), now.Second(), now.Nanosecond(),
now.Location(),
)
}
return time.Time{}
}
// StringToDateTime parses a string to time.Time with layout "2006-01-02T15:04:05Z07:00"
func StringToDateTime(s string) time.Time {
// Coba parse RFC3339 dulu
if t, err := time.Parse(time.RFC3339, s); err == nil {
return t
}
// Jika gagal, coba parse "2006-01-02"
if t, err := time.Parse("2006-01-02", s); err == nil {
now := time.Now()
// Gabungkan tanggal dari input dengan jam:menit:detik dari waktu sekarang
return time.Date(
t.Year(), t.Month(), t.Day(),
now.Hour(), now.Minute(), now.Second(), now.Nanosecond(),
now.Location(),
)
}
// Jika gagal semua, return zero time
return time.Time{}
}
func DateToString(t time.Time) string {
return t.Format("2006-01-02")
}
func DateTimeToString(t time.Time) string {
return t.Format(time.RFC3339)
}