Merge pull request 'feat(spirit): added arrack and aquavit' (#41) from spirits-characteristics into staging
Reviewed-on: #41
This commit is contained in:
commit
d1857a3ccd
@ -62,7 +62,9 @@ export enum WhiteSpiritVariants {
|
||||
EauDeVie = 'Eau de Vie',
|
||||
Grappa = 'Grappa',
|
||||
Baijiu = 'Baijiu',
|
||||
Soju = 'Soju'
|
||||
Soju = 'Soju',
|
||||
Aquavit = 'Aquavit',
|
||||
Arrack = 'Arrack'
|
||||
}
|
||||
|
||||
export enum DarkSpiritVariants {
|
||||
@ -74,6 +76,7 @@ export enum DarkSpiritVariants {
|
||||
Mezcal = 'Mezcal',
|
||||
Rum = 'Rum',
|
||||
Slivovitz = 'Slivovitz',
|
||||
Arrack = 'Arrack',
|
||||
Whiskey = 'Whiskey'
|
||||
}
|
||||
|
||||
|
@ -95,7 +95,9 @@ export const spiritVariantMap: {
|
||||
'Buckwheat',
|
||||
'Rice',
|
||||
'Sweet Potato'
|
||||
]
|
||||
],
|
||||
[WhiteSpiritVariants.Aquavit]: [],
|
||||
[WhiteSpiritVariants.Arrack]: []
|
||||
},
|
||||
[SpiritType.Dark]: {
|
||||
[DarkSpiritVariants.Absinthe]: ['Jaune', 'Verte'],
|
||||
@ -139,7 +141,8 @@ export const spiritVariantMap: {
|
||||
'Corn',
|
||||
'Oat',
|
||||
'Rice'
|
||||
]
|
||||
],
|
||||
[DarkSpiritVariants.Arrack]: []
|
||||
},
|
||||
[SpiritType.Liqueurs]: {
|
||||
[LiqueursSpiritVariants.Amaro]: [],
|
||||
@ -199,7 +202,8 @@ export const spiritCharacteristicsMap: {
|
||||
WhiteSpiritVariants.Mezcal,
|
||||
WhiteSpiritVariants.Soju,
|
||||
WhiteSpiritVariants.Vodka,
|
||||
WhiteSpiritVariants.Rum
|
||||
WhiteSpiritVariants.Rum,
|
||||
WhiteSpiritVariants.Aquavit
|
||||
],
|
||||
[SpiritCharacteristics.FruityAndAromatic]: [
|
||||
WhiteSpiritVariants.Rum,
|
||||
@ -217,7 +221,8 @@ export const spiritCharacteristicsMap: {
|
||||
DarkSpiritVariants.Genever,
|
||||
WhiteSpiritVariants.Gin,
|
||||
WhiteSpiritVariants.Pastis,
|
||||
DarkSpiritVariants.Chartreuse
|
||||
DarkSpiritVariants.Chartreuse,
|
||||
WhiteSpiritVariants.Aquavit
|
||||
],
|
||||
|
||||
[SpiritCharacteristics.SweetAndSyrupy]: [
|
||||
@ -235,7 +240,9 @@ export const spiritCharacteristicsMap: {
|
||||
DarkSpiritVariants.Mezcal,
|
||||
DarkSpiritVariants.Whiskey,
|
||||
LiqueursSpiritVariants.Cream,
|
||||
LiqueursSpiritVariants.Honey
|
||||
LiqueursSpiritVariants.Honey,
|
||||
WhiteSpiritVariants.Arrack,
|
||||
DarkSpiritVariants.Arrack
|
||||
],
|
||||
[SpiritCharacteristics.RichAndFullBodied]: [
|
||||
WhiteSpiritVariants.Baijiu,
|
||||
|
@ -20,56 +20,6 @@ export const spiritValidation = (data: unknown): Joi.ValidationResult =>
|
||||
type: Joi.string()
|
||||
.valid(...Object.values(SpiritType))
|
||||
.required(),
|
||||
characteristics: Joi.array()
|
||||
.items(
|
||||
Joi.string().custom((characteristic, helper) => {
|
||||
if (!Object.values(SpiritCharacteristics).includes(characteristic)) {
|
||||
return helper.message({
|
||||
custom: Joi.expression(
|
||||
`"${characteristic}" is not a valid characteristic. Valid options are [${Object.values(
|
||||
SpiritCharacteristics
|
||||
)
|
||||
.map((option) => `"${option}"`)
|
||||
.join(', ')}]`
|
||||
)
|
||||
})
|
||||
}
|
||||
|
||||
const spiritType: SpiritType = helper.state.ancestors[1].type
|
||||
|
||||
const spiritVariant: string | { [key: string]: unknown } =
|
||||
helper.state.ancestors[1].variant
|
||||
|
||||
const spiritVariantName =
|
||||
typeof spiritVariant === 'string'
|
||||
? spiritVariant
|
||||
: Object.keys(spiritVariant)[0]
|
||||
|
||||
const variantsInCharacteristic =
|
||||
spiritCharacteristicsMap[characteristic as SpiritCharacteristics]
|
||||
|
||||
const characteristicsInVariant = Object.keys(
|
||||
spiritCharacteristicsMap
|
||||
).filter((char) =>
|
||||
spiritCharacteristicsMap[char as SpiritCharacteristics].includes(
|
||||
spiritVariantName
|
||||
)
|
||||
)
|
||||
|
||||
if (!variantsInCharacteristic.includes(spiritVariantName)) {
|
||||
return helper.message({
|
||||
custom: Joi.expression(
|
||||
`"${characteristic}" is not a valid characteristic for "${spiritType} -> ${spiritVariantName}". Valid options are [${characteristicsInVariant
|
||||
.map((option) => `"${option}"`)
|
||||
.join(', ')}]`
|
||||
)
|
||||
})
|
||||
}
|
||||
|
||||
return characteristic
|
||||
})
|
||||
)
|
||||
.required(),
|
||||
variant: Joi.alternatives().try(
|
||||
Joi.string().custom((variant, helper) => {
|
||||
// return if no value
|
||||
@ -267,6 +217,57 @@ export const spiritValidation = (data: unknown): Joi.ValidationResult =>
|
||||
}
|
||||
)
|
||||
),
|
||||
characteristics: Joi.array()
|
||||
.items(
|
||||
Joi.string().custom((characteristic, helper) => {
|
||||
if (!Object.values(SpiritCharacteristics).includes(characteristic)) {
|
||||
return helper.message({
|
||||
custom: Joi.expression(
|
||||
`"${characteristic}" is not a valid characteristic. Valid options are [${Object.values(
|
||||
SpiritCharacteristics
|
||||
)
|
||||
.map((option) => `"${option}"`)
|
||||
.join(', ')}]`
|
||||
)
|
||||
})
|
||||
}
|
||||
|
||||
const spiritType: SpiritType = helper.state.ancestors[1].type
|
||||
|
||||
const spiritVariant: string | { [key: string]: unknown } =
|
||||
helper.state.ancestors[1].variant
|
||||
|
||||
const spiritVariantName =
|
||||
typeof spiritVariant === 'string'
|
||||
? spiritVariant
|
||||
: Object.keys(spiritVariant)[0]
|
||||
|
||||
const variantsInCharacteristic =
|
||||
spiritCharacteristicsMap[characteristic as SpiritCharacteristics]
|
||||
|
||||
const characteristicsInVariant = Object.keys(
|
||||
spiritCharacteristicsMap
|
||||
).filter((char) =>
|
||||
spiritCharacteristicsMap[char as SpiritCharacteristics].includes(
|
||||
spiritVariantName
|
||||
)
|
||||
)
|
||||
|
||||
if (!variantsInCharacteristic.includes(spiritVariantName)) {
|
||||
return helper.message({
|
||||
custom: Joi.expression(
|
||||
`"${characteristic}" is not a valid characteristic for "${spiritType} -> ${spiritVariantName}". Valid options are [${characteristicsInVariant
|
||||
.map((option) => `"${option}"`)
|
||||
.join(', ')}]`
|
||||
)
|
||||
})
|
||||
}
|
||||
|
||||
return characteristic
|
||||
})
|
||||
)
|
||||
.required(),
|
||||
|
||||
ingredients: Joi.array()
|
||||
.items(Joi.string().valid(...Object.values(Ingredient)))
|
||||
.required(),
|
||||
@ -277,7 +278,7 @@ export const spiritValidation = (data: unknown): Joi.ValidationResult =>
|
||||
vintage: Joi.alternatives()
|
||||
.try(
|
||||
Joi.string().valid(...Object.values(VintageOptions)),
|
||||
Joi.number().min(1000).max(new Date().getFullYear())
|
||||
Joi.number().min(1700).max(new Date().getFullYear())
|
||||
)
|
||||
.required(),
|
||||
RRPamount: Joi.number().required(),
|
||||
|
@ -362,7 +362,7 @@ export const wineValidation = (data: unknown): Joi.ValidationResult =>
|
||||
vintage: Joi.alternatives()
|
||||
.try(
|
||||
Joi.string().valid(...Object.values(VintageOptions)),
|
||||
Joi.number().min(1000).max(new Date().getFullYear())
|
||||
Joi.number().min(1700).max(new Date().getFullYear())
|
||||
)
|
||||
.required(),
|
||||
volume: Joi.string()
|
||||
|
Loading…
x
Reference in New Issue
Block a user