diff --git a/catalog/curated-20261016/apply.sql b/catalog/curated-20261016/apply.sql index 5e263bd..663fa2c 100644 --- a/catalog/curated-20261016/apply.sql +++ b/catalog/curated-20261016/apply.sql @@ -140,17 +140,17 @@ INSERT INTO style_tags (style_tag_id,tag_name,category) VALUES ('0bece143-5b8e-5 INSERT INTO hairstyle_style_tags (hairstyle_id,style_tag_id) VALUES ('0c29ffac-9ee8-56b8-a7bf-13d46a0830a5','0bece143-5b8e-50f8-b836-c698a5e9378e') ON CONFLICT DO NOTHING; -INSERT INTO files (file_id,upload_id,user_id,owner_type,purpose,status,object_key,content_type,file_size,sha256,width,height,expires_at,file_name) VALUES ('f35d850d-e1e9-5889-8536-170c1b4dd860','c9c7c93e-5a05-5c2b-a8ce-f108c0fe20b4',NULL,'SYSTEM','HAIRSTYLE_THUMBNAIL','READY','HAIRSTYLE_THUMBNAIL/curated-20261016/f35d850d-e1e9-5889-8536-170c1b4dd860.jpg','image/jpeg',119849,'762bfc399c1f086e30036a40fc1c89b1b273485b328c0e0a8b81ce38ab3075e8',1200,1500,TIMESTAMPTZ '2100-01-01 00:00:00+00','내추럴 아프로.jpg') ON CONFLICT (file_id) DO NOTHING; +INSERT INTO files (file_id,upload_id,user_id,owner_type,purpose,status,object_key,content_type,file_size,sha256,width,height,expires_at,file_name) VALUES ('670b0a2a-5de5-5471-97b5-332af6df4027','3b641806-b7f8-51d5-a146-746e3bfefee6',NULL,'SYSTEM','HAIRSTYLE_THUMBNAIL','READY','HAIRSTYLE_THUMBNAIL/curated-20261016/670b0a2a-5de5-5471-97b5-332af6df4027.jpg','image/jpeg',224927,'00fd28a53ecea79d91124ab687e5e1db581f17695f567f57b5f22e8ef305b834',1200,1800,TIMESTAMPTZ '2100-01-01 00:00:00+00','내추럴 아프로.jpg') ON CONFLICT (file_id) DO NOTHING; -DO $$ BEGIN IF NOT EXISTS (SELECT 1 FROM files WHERE file_id='f35d850d-e1e9-5889-8536-170c1b4dd860' AND owner_type='SYSTEM' AND object_key='HAIRSTYLE_THUMBNAIL/curated-20261016/f35d850d-e1e9-5889-8536-170c1b4dd860.jpg' AND sha256='762bfc399c1f086e30036a40fc1c89b1b273485b328c0e0a8b81ce38ab3075e8' AND status='READY') THEN RAISE EXCEPTION 'File identity conflict'; END IF; END $$; +DO $$ BEGIN IF NOT EXISTS (SELECT 1 FROM files WHERE file_id='670b0a2a-5de5-5471-97b5-332af6df4027' AND owner_type='SYSTEM' AND object_key='HAIRSTYLE_THUMBNAIL/curated-20261016/670b0a2a-5de5-5471-97b5-332af6df4027.jpg' AND sha256='00fd28a53ecea79d91124ab687e5e1db581f17695f567f57b5f22e8ef305b834' AND status='READY') THEN RAISE EXCEPTION 'File identity conflict'; END IF; END $$; -INSERT INTO hairstyle_assets (hairstyle_id,style_name,category,thumbnail_file_id,active,asset_version) VALUES ('3719ea70-8240-5652-8a16-02f8f5685b5f','내추럴 아프로','SHORT','f35d850d-e1e9-5889-8536-170c1b4dd860',true,'curated-20261016') ON CONFLICT (hairstyle_id) DO NOTHING; +INSERT INTO hairstyle_assets (hairstyle_id,style_name,category,thumbnail_file_id,active,asset_version) VALUES ('1dcae9e1-1198-5f5d-bec7-8f1cf184cd77','내추럴 아프로','SHORT','670b0a2a-5de5-5471-97b5-332af6df4027',true,'curated-20261016') ON CONFLICT (hairstyle_id) DO NOTHING; -INSERT INTO hairstyle_recommendation_profiles (hairstyle_id,service_types,compatible_hair_lengths,compatible_hair_types,compatible_hair_thicknesses,compatible_hair_conditions,contraindicated_hair_conditions,minimum_hair_length,estimated_daily_care_minutes,management_difficulty,chemical_stress_level,editorial_priority,metadata_version) VALUES ('3719ea70-8240-5652-8a16-02f8f5685b5f','["CUT", "STYLING"]'::jsonb,'["SHORT", "BELOW_CHIN", "BELOW_SHOULDER", "BELOW_CHEST"]'::jsonb,'["CURLY"]'::jsonb,'["THIN", "NORMAL", "THICK"]'::jsonb,'["HEALTHY", "NORMAL", "DAMAGED", "SEVERELY_DAMAGED"]'::jsonb,'[]'::jsonb,'SHORT',10,'MEDIUM','LOW',50,'curated-20261016') ON CONFLICT (hairstyle_id) DO NOTHING; +INSERT INTO hairstyle_recommendation_profiles (hairstyle_id,service_types,compatible_hair_lengths,compatible_hair_types,compatible_hair_thicknesses,compatible_hair_conditions,contraindicated_hair_conditions,minimum_hair_length,estimated_daily_care_minutes,management_difficulty,chemical_stress_level,editorial_priority,metadata_version) VALUES ('1dcae9e1-1198-5f5d-bec7-8f1cf184cd77','["CUT", "STYLING"]'::jsonb,'["SHORT", "BELOW_CHIN", "BELOW_SHOULDER", "BELOW_CHEST"]'::jsonb,'["CURLY"]'::jsonb,'["THIN", "NORMAL", "THICK"]'::jsonb,'["HEALTHY", "NORMAL", "DAMAGED", "SEVERELY_DAMAGED"]'::jsonb,'[]'::jsonb,'SHORT',10,'MEDIUM','LOW',50,'curated-20261016') ON CONFLICT (hairstyle_id) DO NOTHING; INSERT INTO style_tags (style_tag_id,tag_name,category) VALUES ('6d25f1f6-498a-51b9-b88a-b9b937a6c1bd','아프로','SHORT') ON CONFLICT (style_tag_id) DO NOTHING; -INSERT INTO hairstyle_style_tags (hairstyle_id,style_tag_id) VALUES ('3719ea70-8240-5652-8a16-02f8f5685b5f','6d25f1f6-498a-51b9-b88a-b9b937a6c1bd') ON CONFLICT DO NOTHING; +INSERT INTO hairstyle_style_tags (hairstyle_id,style_tag_id) VALUES ('1dcae9e1-1198-5f5d-bec7-8f1cf184cd77','6d25f1f6-498a-51b9-b88a-b9b937a6c1bd') ON CONFLICT DO NOTHING; INSERT INTO files (file_id,upload_id,user_id,owner_type,purpose,status,object_key,content_type,file_size,sha256,width,height,expires_at,file_name) VALUES ('251f0cfd-e52c-5d25-b760-afcb97ef0211','9f567933-7385-59e0-b97f-caf3ba3deacc',NULL,'SYSTEM','HAIRSTYLE_THUMBNAIL','READY','HAIRSTYLE_THUMBNAIL/curated-20261016/251f0cfd-e52c-5d25-b760-afcb97ef0211.jpg','image/jpeg',137001,'9b43790775b604fc4f67c6a2e27533b373c09420cb82879e69abf9b83f0f300d',1200,1800,TIMESTAMPTZ '2100-01-01 00:00:00+00','컬리 프린지 테이퍼.jpg') ON CONFLICT (file_id) DO NOTHING; @@ -226,21 +226,19 @@ INSERT INTO style_tags (style_tag_id,tag_name,category) VALUES ('3e2e412d-ee7a-5 INSERT INTO hairstyle_style_tags (hairstyle_id,style_tag_id) VALUES ('cb9713ac-a1b0-5e95-a303-e24bc4a425ac','3e2e412d-ee7a-5e5e-b9ae-ad080ca70269') ON CONFLICT DO NOTHING; -INSERT INTO files (file_id,upload_id,user_id,owner_type,purpose,status,object_key,content_type,file_size,sha256,width,height,expires_at,file_name) VALUES ('6fb84335-f266-5528-8c37-6981a17aa42c','15e79121-5f0d-5114-a099-acbb6552ad82',NULL,'SYSTEM','HAIRSTYLE_THUMBNAIL','READY','HAIRSTYLE_THUMBNAIL/curated-20261016/6fb84335-f266-5528-8c37-6981a17aa42c.jpg','image/jpeg',243852,'d74b29d9a7e1a27ffd58aac942d3222b459d9a6fa93c4510d2003b8e0a565c4c',1200,1800,TIMESTAMPTZ '2100-01-01 00:00:00+00','미디엄 언더컷 웨이브.jpg') ON CONFLICT (file_id) DO NOTHING; +INSERT INTO files (file_id,upload_id,user_id,owner_type,purpose,status,object_key,content_type,file_size,sha256,width,height,expires_at,file_name) VALUES ('c269cd83-125a-500e-bbe4-d44dfca09429','ce7b3303-dd4e-51a8-b77c-55c68dc52db1',NULL,'SYSTEM','HAIRSTYLE_THUMBNAIL','READY','HAIRSTYLE_THUMBNAIL/curated-20261016/c269cd83-125a-500e-bbe4-d44dfca09429.jpg','image/jpeg',140293,'f8733ea98f929bf3385e9ea205d3793e640808340e68f33374ed1fca6d1dabfd',1200,1798,TIMESTAMPTZ '2100-01-01 00:00:00+00','이어턱 미디엄컷.jpg') ON CONFLICT (file_id) DO NOTHING; -DO $$ BEGIN IF NOT EXISTS (SELECT 1 FROM files WHERE file_id='6fb84335-f266-5528-8c37-6981a17aa42c' AND owner_type='SYSTEM' AND object_key='HAIRSTYLE_THUMBNAIL/curated-20261016/6fb84335-f266-5528-8c37-6981a17aa42c.jpg' AND sha256='d74b29d9a7e1a27ffd58aac942d3222b459d9a6fa93c4510d2003b8e0a565c4c' AND status='READY') THEN RAISE EXCEPTION 'File identity conflict'; END IF; END $$; +DO $$ BEGIN IF NOT EXISTS (SELECT 1 FROM files WHERE file_id='c269cd83-125a-500e-bbe4-d44dfca09429' AND owner_type='SYSTEM' AND object_key='HAIRSTYLE_THUMBNAIL/curated-20261016/c269cd83-125a-500e-bbe4-d44dfca09429.jpg' AND sha256='f8733ea98f929bf3385e9ea205d3793e640808340e68f33374ed1fca6d1dabfd' AND status='READY') THEN RAISE EXCEPTION 'File identity conflict'; END IF; END $$; -INSERT INTO hairstyle_assets (hairstyle_id,style_name,category,thumbnail_file_id,active,asset_version) VALUES ('7d3fb671-6ae0-5bcb-a9f7-54d7c5f534f9','미디엄 언더컷 웨이브','MEDIUM','6fb84335-f266-5528-8c37-6981a17aa42c',true,'curated-20261016') ON CONFLICT (hairstyle_id) DO NOTHING; +INSERT INTO hairstyle_assets (hairstyle_id,style_name,category,thumbnail_file_id,active,asset_version) VALUES ('12a552fe-4ad8-5ee3-8a85-0795f3b27fb4','이어턱 미디엄컷','MEDIUM','c269cd83-125a-500e-bbe4-d44dfca09429',true,'curated-20261016') ON CONFLICT (hairstyle_id) DO NOTHING; -INSERT INTO hairstyle_recommendation_profiles (hairstyle_id,service_types,compatible_hair_lengths,compatible_hair_types,compatible_hair_thicknesses,compatible_hair_conditions,contraindicated_hair_conditions,minimum_hair_length,estimated_daily_care_minutes,management_difficulty,chemical_stress_level,editorial_priority,metadata_version) VALUES ('7d3fb671-6ae0-5bcb-a9f7-54d7c5f534f9','["CUT", "STYLING"]'::jsonb,'["BELOW_CHIN", "BELOW_SHOULDER", "BELOW_CHEST"]'::jsonb,'["WAVY", "CURLY"]'::jsonb,'["THIN", "NORMAL", "THICK"]'::jsonb,'["HEALTHY", "NORMAL", "DAMAGED", "SEVERELY_DAMAGED"]'::jsonb,'[]'::jsonb,'BELOW_CHIN',10,'MEDIUM','LOW',50,'curated-20261016') ON CONFLICT (hairstyle_id) DO NOTHING; +INSERT INTO hairstyle_recommendation_profiles (hairstyle_id,service_types,compatible_hair_lengths,compatible_hair_types,compatible_hair_thicknesses,compatible_hair_conditions,contraindicated_hair_conditions,minimum_hair_length,estimated_daily_care_minutes,management_difficulty,chemical_stress_level,editorial_priority,metadata_version) VALUES ('12a552fe-4ad8-5ee3-8a85-0795f3b27fb4','["CUT", "STYLING"]'::jsonb,'["BELOW_CHIN", "BELOW_SHOULDER", "BELOW_CHEST"]'::jsonb,'["STRAIGHT", "WAVY"]'::jsonb,'["THIN", "NORMAL", "THICK"]'::jsonb,'["HEALTHY", "NORMAL", "DAMAGED", "SEVERELY_DAMAGED"]'::jsonb,'[]'::jsonb,'BELOW_CHIN',5,'LOW','LOW',50,'curated-20261016') ON CONFLICT (hairstyle_id) DO NOTHING; -INSERT INTO style_tags (style_tag_id,tag_name,category) VALUES ('73108c3a-e190-5c3f-afc8-6df41dc448f4','언더컷','MEDIUM') ON CONFLICT (style_tag_id) DO NOTHING; +INSERT INTO hairstyle_style_tags (hairstyle_id,style_tag_id) VALUES ('12a552fe-4ad8-5ee3-8a85-0795f3b27fb4','20000000-0000-4000-8000-000000000002') ON CONFLICT DO NOTHING; -INSERT INTO hairstyle_style_tags (hairstyle_id,style_tag_id) VALUES ('7d3fb671-6ae0-5bcb-a9f7-54d7c5f534f9','73108c3a-e190-5c3f-afc8-6df41dc448f4') ON CONFLICT DO NOTHING; +INSERT INTO style_tags (style_tag_id,tag_name,category) VALUES ('3d5ea65d-7b9a-5826-9084-e6d3f6b45f79','센터파트','MEDIUM') ON CONFLICT (style_tag_id) DO NOTHING; -INSERT INTO style_tags (style_tag_id,tag_name,category) VALUES ('2c517e2b-986e-5bde-8744-9ade9b5f9a7d','웨이브','MEDIUM') ON CONFLICT (style_tag_id) DO NOTHING; - -INSERT INTO hairstyle_style_tags (hairstyle_id,style_tag_id) VALUES ('7d3fb671-6ae0-5bcb-a9f7-54d7c5f534f9','2c517e2b-986e-5bde-8744-9ade9b5f9a7d') ON CONFLICT DO NOTHING; +INSERT INTO hairstyle_style_tags (hairstyle_id,style_tag_id) VALUES ('12a552fe-4ad8-5ee3-8a85-0795f3b27fb4','3d5ea65d-7b9a-5826-9084-e6d3f6b45f79') ON CONFLICT DO NOTHING; INSERT INTO files (file_id,upload_id,user_id,owner_type,purpose,status,object_key,content_type,file_size,sha256,width,height,expires_at,file_name) VALUES ('e0c83e60-8516-5dc7-b268-8180176c8196','42f61913-29d9-5d7f-95ad-cc7bceab6d0c',NULL,'SYSTEM','HAIRSTYLE_THUMBNAIL','READY','HAIRSTYLE_THUMBNAIL/curated-20261016/e0c83e60-8516-5dc7-b268-8180176c8196.jpg','image/jpeg',201305,'f8e07a2f52fda943a20f947540fa6069f49713bf46af627d0a4c0a29a881dbad',1200,2133,TIMESTAMPTZ '2100-01-01 00:00:00+00','버즈컷.jpg') ON CONFLICT (file_id) DO NOTHING; @@ -674,6 +672,6 @@ UPDATE hairstyle_assets SET style_name='콘로우 로우번',category='BRAIDED', UPDATE hairstyle_recommendation_profiles SET service_types='["STYLING"]'::jsonb,minimum_hair_length='BELOW_SHOULDER',compatible_hair_lengths='["BELOW_SHOULDER","BELOW_CHEST"]'::jsonb,metadata_version='curated-20261016',updated_at=now() WHERE hairstyle_id='71000000-0000-4000-8000-000000000066' AND metadata_version <> 'curated-20261016'; -DO $$ BEGIN IF (SELECT count(*) FROM hairstyle_assets a JOIN files f ON f.file_id=a.thumbnail_file_id JOIN hairstyle_recommendation_profiles p USING(hairstyle_id) WHERE a.hairstyle_id IN ('0d198408-5bf7-514c-b3af-52d56d990361'::uuid,'81871f24-b393-593a-b0b8-f31d7296118a'::uuid,'7ffbc247-3416-5316-905e-6fe769a4153f'::uuid,'12d8e1fd-b70d-50e0-a0d5-a4d769759969'::uuid,'becfa223-4c43-5ca1-80b0-1e3cd17bf008'::uuid,'2f367c11-435d-5c1f-b005-45af3c693de2'::uuid,'a04671ae-c01b-5568-8897-cea144960c1d'::uuid,'3ae493ce-1c5c-566c-95a2-ca69ace18f5f'::uuid,'0c29ffac-9ee8-56b8-a7bf-13d46a0830a5'::uuid,'3719ea70-8240-5652-8a16-02f8f5685b5f'::uuid,'55a650e5-5a99-5ed7-bd78-2ede7a818ed6'::uuid,'f44a00c9-3c3f-5927-98f7-32966c2b137e'::uuid,'090392ec-2fcb-56e3-ba4c-0063af2471d3'::uuid,'30482fbb-adf7-5843-a988-f340b85fa429'::uuid,'cb9713ac-a1b0-5e95-a303-e24bc4a425ac'::uuid,'7d3fb671-6ae0-5bcb-a9f7-54d7c5f534f9'::uuid,'b98199c9-df22-5914-8d6c-ff1c9818aa2e'::uuid,'7f17a8fe-2b82-558e-969f-79a3563ce8fb'::uuid,'87408dfc-91cf-53df-bfab-369e62e93e38'::uuid,'b4b3e4fc-cd3e-5df2-ae97-4947e1076293'::uuid,'b252732a-2d91-5c01-afd5-6d36f1bd3a92'::uuid,'86c65822-8ea7-58c4-b115-d9924435ea68'::uuid,'8a9d43c6-cf38-5cc3-b038-94fe0f689de7'::uuid,'c17d60af-6144-5d44-9658-eda2e5ad638d'::uuid,'06cc4930-e540-5d6f-b284-1e08b1818a1c'::uuid,'76145924-61ee-52ca-8fb6-faf5392da1d5'::uuid,'447ef348-7a08-5565-b345-de7ba9aa77fd'::uuid,'cbf47ccd-6a33-5cc1-963d-6dcd61fd0189'::uuid,'02310a32-527e-599b-aafd-a64c63398d68'::uuid,'4972ab0a-e635-58d1-85e3-9889c6cce4a7'::uuid,'42d2fb31-6285-5aa4-864f-8fbe10e75a5c'::uuid,'f055858a-07fe-5a79-a257-b7ccc3dab7f8'::uuid,'8167d07c-eb7e-5632-878a-0df3e0ac5ee7'::uuid,'6abf9427-67ac-5754-a2f3-a29c50a8f4b6'::uuid,'b1fdcdba-f935-5f0d-8fba-e9b56f3003fc'::uuid,'e0ef9b77-ea49-5d67-80da-673fc665e394'::uuid,'ffe39c84-1b70-58f0-979c-b7474c76888a'::uuid,'16c7597c-2c40-51e1-a754-ef4fe35aa2b3'::uuid,'c9442c21-485b-5d64-87c3-a97b491e3702'::uuid,'e01d6760-17b8-5cd4-97de-c604322e304d'::uuid,'abcb8ccb-9044-5c1b-954e-2c222fc5a701'::uuid,'fb32cea4-c14f-5c7e-a0d0-2225caf4361c'::uuid,'5b2448da-3946-5de8-9e22-a1584575acda'::uuid,'c0dcc01b-d923-56b0-ba41-3e7f060dac05'::uuid,'cc25d0ff-ec17-5eab-9dc3-95b0fcc14ad0'::uuid,'31717139-b772-5190-95ad-bdad71d6aaed'::uuid,'9dde44be-0010-5f35-880b-35075b1c9ca4'::uuid,'5aa1cd83-3951-5ae7-999f-ddd765f75108'::uuid,'e4eff9f7-6ee8-5023-95c1-fdbad8a771e7'::uuid,'2a7afeef-18a9-5e09-9516-a248e68b4090'::uuid) AND a.active AND a.asset_version='curated-20261016' AND f.status='READY' AND p.minimum_hair_length IS NOT NULL) <> 50 THEN RAISE EXCEPTION 'Expected 50 ready replacement styles'; END IF; IF EXISTS (SELECT 1 FROM hairstyle_assets WHERE hairstyle_id IN ('71000000-0000-4000-8000-000000000068'::uuid,'71000000-0000-4000-8000-000000000075'::uuid,'71000000-0000-4000-8000-000000000076'::uuid,'71000000-0000-4000-8000-000000000077'::uuid,'71000000-0000-4000-8000-000000000078'::uuid,'71000000-0000-4000-8000-000000000001'::uuid,'71000000-0000-4000-8000-000000000023'::uuid,'71000000-0000-4000-8000-000000000027'::uuid,'71000000-0000-4000-8000-000000000028'::uuid,'71000000-0000-4000-8000-000000000030'::uuid,'71000000-0000-4000-8000-000000000050'::uuid,'71000000-0000-4000-8000-000000000051'::uuid,'71000000-0000-4000-8000-000000000054'::uuid,'71000000-0000-4000-8000-000000000055'::uuid,'71000000-0000-4000-8000-000000000056'::uuid,'71000000-0000-4000-8000-000000000057'::uuid,'71000000-0000-4000-8000-000000000058'::uuid,'71000000-0000-4000-8000-000000000059'::uuid,'71000000-0000-4000-8000-000000000060'::uuid,'71000000-0000-4000-8000-000000000061'::uuid,'71000000-0000-4000-8000-000000000062'::uuid,'71000000-0000-4000-8000-000000000063'::uuid,'71000000-0000-4000-8000-000000000064'::uuid,'71000000-0000-4000-8000-000000000065'::uuid,'71000000-0000-4000-8000-000000000067'::uuid,'71000000-0000-4000-8000-000000000033'::uuid,'71000000-0000-4000-8000-000000000039'::uuid,'71000000-0000-4000-8000-000000000042'::uuid,'71000000-0000-4000-8000-000000000043'::uuid,'71000000-0000-4000-8000-000000000046'::uuid,'71000000-0000-4000-8000-000000000073'::uuid,'71000000-0000-4000-8000-000000000080'::uuid,'71000000-0000-4000-8000-000000000081'::uuid,'71000000-0000-4000-8000-000000000082'::uuid,'71000000-0000-4000-8000-000000000084'::uuid,'71000000-0000-4000-8000-000000000085'::uuid,'71000000-0000-4000-8000-000000000088'::uuid,'71000000-0000-4000-8000-000000000089'::uuid,'71000000-0000-4000-8000-000000000090'::uuid,'71000000-0000-4000-8000-000000000093'::uuid,'71000000-0000-4000-8000-000000000094'::uuid,'71000000-0000-4000-8000-000000000095'::uuid,'71000000-0000-4000-8000-000000000097'::uuid,'71000000-0000-4000-8000-000000000100'::uuid,'71000000-0000-4000-8000-000000000004'::uuid,'71000000-0000-4000-8000-000000000006'::uuid,'71000000-0000-4000-8000-000000000035'::uuid,'71000000-0000-4000-8000-000000000036'::uuid,'71000000-0000-4000-8000-000000000049'::uuid,'71000000-0000-4000-8000-000000000070'::uuid,'71000000-0000-4000-8000-000000000072'::uuid,'71000000-0000-4000-8000-000000000079'::uuid,'71000000-0000-4000-8000-000000000091'::uuid,'71000000-0000-4000-8000-000000000098'::uuid,'71000000-0000-4000-8000-000000000099'::uuid,'71000000-0000-4000-8000-000000000005'::uuid,'71000000-0000-4000-8000-000000000034'::uuid,'71000000-0000-4000-8000-000000000041'::uuid) AND active) THEN RAISE EXCEPTION 'Retired styles are still active'; END IF; END $$; +DO $$ BEGIN IF (SELECT count(*) FROM hairstyle_assets a JOIN files f ON f.file_id=a.thumbnail_file_id JOIN hairstyle_recommendation_profiles p USING(hairstyle_id) WHERE a.hairstyle_id IN ('0d198408-5bf7-514c-b3af-52d56d990361'::uuid,'81871f24-b393-593a-b0b8-f31d7296118a'::uuid,'7ffbc247-3416-5316-905e-6fe769a4153f'::uuid,'12d8e1fd-b70d-50e0-a0d5-a4d769759969'::uuid,'becfa223-4c43-5ca1-80b0-1e3cd17bf008'::uuid,'2f367c11-435d-5c1f-b005-45af3c693de2'::uuid,'a04671ae-c01b-5568-8897-cea144960c1d'::uuid,'3ae493ce-1c5c-566c-95a2-ca69ace18f5f'::uuid,'0c29ffac-9ee8-56b8-a7bf-13d46a0830a5'::uuid,'1dcae9e1-1198-5f5d-bec7-8f1cf184cd77'::uuid,'55a650e5-5a99-5ed7-bd78-2ede7a818ed6'::uuid,'f44a00c9-3c3f-5927-98f7-32966c2b137e'::uuid,'090392ec-2fcb-56e3-ba4c-0063af2471d3'::uuid,'30482fbb-adf7-5843-a988-f340b85fa429'::uuid,'cb9713ac-a1b0-5e95-a303-e24bc4a425ac'::uuid,'12a552fe-4ad8-5ee3-8a85-0795f3b27fb4'::uuid,'b98199c9-df22-5914-8d6c-ff1c9818aa2e'::uuid,'7f17a8fe-2b82-558e-969f-79a3563ce8fb'::uuid,'87408dfc-91cf-53df-bfab-369e62e93e38'::uuid,'b4b3e4fc-cd3e-5df2-ae97-4947e1076293'::uuid,'b252732a-2d91-5c01-afd5-6d36f1bd3a92'::uuid,'86c65822-8ea7-58c4-b115-d9924435ea68'::uuid,'8a9d43c6-cf38-5cc3-b038-94fe0f689de7'::uuid,'c17d60af-6144-5d44-9658-eda2e5ad638d'::uuid,'06cc4930-e540-5d6f-b284-1e08b1818a1c'::uuid,'76145924-61ee-52ca-8fb6-faf5392da1d5'::uuid,'447ef348-7a08-5565-b345-de7ba9aa77fd'::uuid,'cbf47ccd-6a33-5cc1-963d-6dcd61fd0189'::uuid,'02310a32-527e-599b-aafd-a64c63398d68'::uuid,'4972ab0a-e635-58d1-85e3-9889c6cce4a7'::uuid,'42d2fb31-6285-5aa4-864f-8fbe10e75a5c'::uuid,'f055858a-07fe-5a79-a257-b7ccc3dab7f8'::uuid,'8167d07c-eb7e-5632-878a-0df3e0ac5ee7'::uuid,'6abf9427-67ac-5754-a2f3-a29c50a8f4b6'::uuid,'b1fdcdba-f935-5f0d-8fba-e9b56f3003fc'::uuid,'e0ef9b77-ea49-5d67-80da-673fc665e394'::uuid,'ffe39c84-1b70-58f0-979c-b7474c76888a'::uuid,'16c7597c-2c40-51e1-a754-ef4fe35aa2b3'::uuid,'c9442c21-485b-5d64-87c3-a97b491e3702'::uuid,'e01d6760-17b8-5cd4-97de-c604322e304d'::uuid,'abcb8ccb-9044-5c1b-954e-2c222fc5a701'::uuid,'fb32cea4-c14f-5c7e-a0d0-2225caf4361c'::uuid,'5b2448da-3946-5de8-9e22-a1584575acda'::uuid,'c0dcc01b-d923-56b0-ba41-3e7f060dac05'::uuid,'cc25d0ff-ec17-5eab-9dc3-95b0fcc14ad0'::uuid,'31717139-b772-5190-95ad-bdad71d6aaed'::uuid,'9dde44be-0010-5f35-880b-35075b1c9ca4'::uuid,'5aa1cd83-3951-5ae7-999f-ddd765f75108'::uuid,'e4eff9f7-6ee8-5023-95c1-fdbad8a771e7'::uuid,'2a7afeef-18a9-5e09-9516-a248e68b4090'::uuid) AND a.active AND a.asset_version='curated-20261016' AND f.status='READY' AND p.minimum_hair_length IS NOT NULL) <> 50 THEN RAISE EXCEPTION 'Expected 50 ready replacement styles'; END IF; IF EXISTS (SELECT 1 FROM hairstyle_assets WHERE hairstyle_id IN ('71000000-0000-4000-8000-000000000068'::uuid,'71000000-0000-4000-8000-000000000075'::uuid,'71000000-0000-4000-8000-000000000076'::uuid,'71000000-0000-4000-8000-000000000077'::uuid,'71000000-0000-4000-8000-000000000078'::uuid,'71000000-0000-4000-8000-000000000001'::uuid,'71000000-0000-4000-8000-000000000023'::uuid,'71000000-0000-4000-8000-000000000027'::uuid,'71000000-0000-4000-8000-000000000028'::uuid,'71000000-0000-4000-8000-000000000030'::uuid,'71000000-0000-4000-8000-000000000050'::uuid,'71000000-0000-4000-8000-000000000051'::uuid,'71000000-0000-4000-8000-000000000054'::uuid,'71000000-0000-4000-8000-000000000055'::uuid,'71000000-0000-4000-8000-000000000056'::uuid,'71000000-0000-4000-8000-000000000057'::uuid,'71000000-0000-4000-8000-000000000058'::uuid,'71000000-0000-4000-8000-000000000059'::uuid,'71000000-0000-4000-8000-000000000060'::uuid,'71000000-0000-4000-8000-000000000061'::uuid,'71000000-0000-4000-8000-000000000062'::uuid,'71000000-0000-4000-8000-000000000063'::uuid,'71000000-0000-4000-8000-000000000064'::uuid,'71000000-0000-4000-8000-000000000065'::uuid,'71000000-0000-4000-8000-000000000067'::uuid,'71000000-0000-4000-8000-000000000033'::uuid,'71000000-0000-4000-8000-000000000039'::uuid,'71000000-0000-4000-8000-000000000042'::uuid,'71000000-0000-4000-8000-000000000043'::uuid,'71000000-0000-4000-8000-000000000046'::uuid,'71000000-0000-4000-8000-000000000073'::uuid,'71000000-0000-4000-8000-000000000080'::uuid,'71000000-0000-4000-8000-000000000081'::uuid,'71000000-0000-4000-8000-000000000082'::uuid,'71000000-0000-4000-8000-000000000084'::uuid,'71000000-0000-4000-8000-000000000085'::uuid,'71000000-0000-4000-8000-000000000088'::uuid,'71000000-0000-4000-8000-000000000089'::uuid,'71000000-0000-4000-8000-000000000090'::uuid,'71000000-0000-4000-8000-000000000093'::uuid,'71000000-0000-4000-8000-000000000094'::uuid,'71000000-0000-4000-8000-000000000095'::uuid,'71000000-0000-4000-8000-000000000097'::uuid,'71000000-0000-4000-8000-000000000100'::uuid,'71000000-0000-4000-8000-000000000004'::uuid,'71000000-0000-4000-8000-000000000006'::uuid,'71000000-0000-4000-8000-000000000035'::uuid,'71000000-0000-4000-8000-000000000036'::uuid,'71000000-0000-4000-8000-000000000049'::uuid,'71000000-0000-4000-8000-000000000070'::uuid,'71000000-0000-4000-8000-000000000072'::uuid,'71000000-0000-4000-8000-000000000079'::uuid,'71000000-0000-4000-8000-000000000091'::uuid,'71000000-0000-4000-8000-000000000098'::uuid,'71000000-0000-4000-8000-000000000099'::uuid,'71000000-0000-4000-8000-000000000005'::uuid,'71000000-0000-4000-8000-000000000034'::uuid,'71000000-0000-4000-8000-000000000041'::uuid) AND active) THEN RAISE EXCEPTION 'Retired styles are still active'; END IF; END $$; COMMIT; diff --git a/catalog/curated-20261016/manifest.json b/catalog/curated-20261016/manifest.json index 3ea2f1f..3882d99 100644 --- a/catalog/curated-20261016/manifest.json +++ b/catalog/curated-20261016/manifest.json @@ -1519,22 +1519,22 @@ }, { "replaces_number": 30, - "hairstyle_id": "3719ea70-8240-5652-8a16-02f8f5685b5f", - "file_id": "f35d850d-e1e9-5889-8536-170c1b4dd860", - "upload_id": "c9c7c93e-5a05-5c2b-a8ce-f108c0fe20b4", + "hairstyle_id": "1dcae9e1-1198-5f5d-bec7-8f1cf184cd77", + "file_id": "670b0a2a-5de5-5471-97b5-332af6df4027", + "upload_id": "3b641806-b7f8-51d5-a146-746e3bfefee6", "style_name": "내추럴 아프로", "category": "SHORT", "style_presentation": "MASCULINE", - "image_file": "images/35249124.jpg", - "object_key": "HAIRSTYLE_THUMBNAIL/curated-20261016/f35d850d-e1e9-5889-8536-170c1b4dd860.jpg", - "sha256": "762bfc399c1f086e30036a40fc1c89b1b273485b328c0e0a8b81ce38ab3075e8", - "file_size": 119849, + "image_file": "images/15790180.jpg", + "object_key": "HAIRSTYLE_THUMBNAIL/curated-20261016/670b0a2a-5de5-5471-97b5-332af6df4027.jpg", + "sha256": "00fd28a53ecea79d91124ab687e5e1db581f17695f567f57b5f22e8ef305b834", + "file_size": 224927, "width": 1200, - "height": 1500, - "source_photo_id": "35249124", - "source_url": "https://www.pexels.com/photo/portrait-of-a-young-black-man-with-earrings-35249124/", - "download_url": "https://images.pexels.com/photos/35249124/pexels-photo-35249124/free-photo-of-portrait-of-a-young-black-man-with-earrings.jpeg?auto=compress&w=1200", - "photographer": "Okiki Onipede", + "height": 1800, + "source_photo_id": "15790180", + "source_url": "https://www.pexels.com/photo/portrait-of-man-15790180/", + "download_url": "https://images.pexels.com/photos/15790180/pexels-photo-15790180/free-photo-of-portrait-of-man.jpeg?auto=compress&w=1200", + "photographer": "Ingrid Gomes", "license": "Pexels License", "license_url": "https://www.pexels.com/license/", "terms_url": "https://www.pexels.com/terms-of-service/", @@ -1880,22 +1880,22 @@ }, { "replaces_number": 38, - "hairstyle_id": "7d3fb671-6ae0-5bcb-a9f7-54d7c5f534f9", - "file_id": "6fb84335-f266-5528-8c37-6981a17aa42c", - "upload_id": "15e79121-5f0d-5114-a099-acbb6552ad82", - "style_name": "미디엄 언더컷 웨이브", + "hairstyle_id": "12a552fe-4ad8-5ee3-8a85-0795f3b27fb4", + "file_id": "c269cd83-125a-500e-bbe4-d44dfca09429", + "upload_id": "ce7b3303-dd4e-51a8-b77c-55c68dc52db1", + "style_name": "이어턱 미디엄컷", "category": "MEDIUM", "style_presentation": "MASCULINE", - "image_file": "images/20742493.jpg", - "object_key": "HAIRSTYLE_THUMBNAIL/curated-20261016/6fb84335-f266-5528-8c37-6981a17aa42c.jpg", - "sha256": "d74b29d9a7e1a27ffd58aac942d3222b459d9a6fa93c4510d2003b8e0a565c4c", - "file_size": 243852, + "image_file": "images/31589335.jpg", + "object_key": "HAIRSTYLE_THUMBNAIL/curated-20261016/c269cd83-125a-500e-bbe4-d44dfca09429.jpg", + "sha256": "f8733ea98f929bf3385e9ea205d3793e640808340e68f33374ed1fca6d1dabfd", + "file_size": 140293, "width": 1200, - "height": 1800, - "source_photo_id": "20742493", - "source_url": "https://www.pexels.com/photo/a-man-wearing-sunglasses-20742493/", - "download_url": "https://images.pexels.com/photos/20742493/pexels-photo-20742493/free-photo-of-a-man-wearing-sunglasses.jpeg?auto=compress&w=1200", - "photographer": "Abhishek Shekhawat", + "height": 1798, + "source_photo_id": "31589335", + "source_url": "https://www.pexels.com/photo/portrait-of-male-model-with-striped-sweater-31589335/", + "download_url": "https://images.pexels.com/photos/31589335/pexels-photo-31589335/free-photo-of-portrait-of-male-model-with-striped-sweater.jpeg?auto=compress&w=1200", + "photographer": "Tim Diercks", "license": "Pexels License", "license_url": "https://www.pexels.com/license/", "terms_url": "https://www.pexels.com/terms-of-service/", @@ -1914,8 +1914,8 @@ ], "minimum_hair_length": "BELOW_CHIN", "compatible_hair_types": [ - "WAVY", - "CURLY" + "STRAIGHT", + "WAVY" ], "compatible_hair_thicknesses": [ "THIN", @@ -1929,13 +1929,13 @@ "SEVERELY_DAMAGED" ], "contraindicated_hair_conditions": [], - "estimated_daily_care_minutes": 10, - "management_difficulty": "MEDIUM", + "estimated_daily_care_minutes": 5, + "management_difficulty": "LOW", "chemical_stress_level": "LOW", "editorial_priority": 50, "tags": [ - "언더컷", - "웨이브" + "리프컷", + "센터파트" ] }, { @@ -3959,5 +3959,5 @@ ] } ], - "sql_sha256": "ed9fdf6f121d844147279ff931f19e2963aa1a797e55c6da7ba7681ae62c0111" + "sql_sha256": "c261ad1dfae2886c93257211083020320fc62726b6cb3613e1d3886f6c30481d" }