feat: Add supported currencies to store model (#6562)

I ultimately went with having a flat list of settings for the store. It wouldn't be very difficult to change it if we wish to do so, but for now this keeps the codebase simpler
This commit is contained in:
Stevche Radevski
2024-03-01 16:43:47 +01:00
committed by GitHub
parent 347aba719c
commit 71ed21de4a
10 changed files with 40 additions and 3 deletions

View File

@@ -46,11 +46,15 @@ describe("Store - Admin", () => {
it("should correctly implement the entire lifecycle of a store", async () => {
const api = useApi() as any
const createdStore = await service.create({ name: "Test store" })
const createdStore = await service.create({
name: "Test store",
supported_currency_codes: ["usd"],
})
expect(createdStore).toEqual(
expect.objectContaining({
id: createdStore.id,
supported_currency_codes: ["usd"],
name: "Test store",
})
)

View File

@@ -3,6 +3,7 @@ export const allowedAdminStoreRelations = []
export const defaultAdminStoreFields = [
"id",
"name",
"supported_currency_codes",
"default_sales_channel_id",
"default_region_id",
"default_location_id",

View File

@@ -1,5 +1,11 @@
import { Type } from "class-transformer"
import { IsObject, IsOptional, IsString, ValidateNested } from "class-validator"
import {
IsArray,
IsObject,
IsOptional,
IsString,
ValidateNested,
} from "class-validator"
import { FindParams, extendedFindParamsMixin } from "../../../types/common"
export class AdminGetStoresStoreParams extends FindParams {}
@@ -41,6 +47,10 @@ export class AdminPostStoresStoreReq {
@IsString()
name?: string
@IsOptional()
@IsArray()
supported_currency_codes?: string[]
@IsOptional()
@IsString()
default_sales_channel_id?: string

View File

@@ -2,6 +2,7 @@ import { StoreTypes } from "@medusajs/types"
export const createStoreFixture: StoreTypes.CreateStoreDTO = {
name: "Test store",
supported_currency_codes: ["usd", "eur"],
default_sales_channel_id: "test-sales-channel",
default_region_id: "test-region",
metadata: {

View File

@@ -19,6 +19,7 @@ moduleIntegrationTestRunner({
expect(store).toEqual(
expect.objectContaining({
name: "Test store",
supported_currency_codes: expect.arrayContaining(["eur", "usd"]),
default_sales_channel_id: "test-sales-channel",
default_region_id: "test-region",
metadata: {

View File

@@ -25,6 +25,16 @@
"default": "'Medusa Store'",
"mappedType": "text"
},
"supported_currency_codes": {
"name": "supported_currency_codes",
"type": "text[]",
"unsigned": false,
"autoincrement": false,
"primary": false,
"nullable": false,
"default": "'{}'",
"mappedType": "array"
},
"default_sales_channel_id": {
"name": "default_sales_channel_id",
"type": "text",

View File

@@ -24,6 +24,9 @@ export class InitialSetup20240226130829 extends Migration {
this.addSql(
`alter table "store" add column "deleted_at" timestamptz null;`
)
this.addSql(
`alter table "store" add column "supported_currency_codes" text[] not null default \'{}\';`
)
this.addSql(
'create index if not exists "IDX_store_deleted_at" on "store" (deleted_at) where deleted_at is not null;'
@@ -35,7 +38,7 @@ export class InitialSetup20240226130829 extends Migration {
// this.addSql(`alter table "store" drop column "invite_link_template";`)
} else {
this.addSql(`create table if not exists "store"
("id" text not null, "name" text not null default \'Medusa Store\',
("id" text not null, "name" text not null default \'Medusa Store\', "supported_currency_codes" text[] not null default \'{}\',
"default_sales_channel_id" text null, "default_region_id" text null, "default_location_id" text null,
"metadata" jsonb null, "created_at" timestamptz not null default now(), "updated_at" timestamptz not null default now(), "deleted_at" timestamptz null,
constraint "store_pkey" primary key ("id"));`)

View File

@@ -35,6 +35,9 @@ export default class Store {
@Property({ columnType: "text", default: "Medusa Store" })
name: string
@Property({ type: "array", default: "{}" })
supported_currency_codes: string[] = []
@Property({ columnType: "text", nullable: true })
default_sales_channel_id: string | null = null

View File

@@ -3,6 +3,7 @@ import { BaseFilterable } from "../../dal"
export interface StoreDTO {
id: string
name: string
supported_currency_codes: string[]
default_sales_channel_id?: string
default_region_id?: string
default_location_id?: string

View File

@@ -1,5 +1,6 @@
export interface CreateStoreDTO {
name?: string
supported_currency_codes?: string[]
default_sales_channel_id?: string
default_region_id?: string
default_location_id?: string
@@ -9,6 +10,7 @@ export interface CreateStoreDTO {
export interface UpsertStoreDTO {
id?: string
name?: string
supported_currency_codes?: string[]
default_sales_channel_id?: string
default_region_id?: string
default_location_id?: string
@@ -17,6 +19,7 @@ export interface UpsertStoreDTO {
export interface UpdateStoreDTO {
name?: string
supported_currency_codes?: string[]
default_sales_channel_id?: string
default_region_id?: string
default_location_id?: string