Files
petfeed/prisma/seed.ts
T
admin b0b83703cd feat(taxonomy): expand dog/cat breeds to full FCI/FIFe nomenclature
Dog breeds: added all 340 remaining FCI-recognized breeds (fetched from
fci.be's nomenclature, 2026-08-23) not already in the existing 20-entry
list, bringing the total to 360. 173 of the 340 additions get a German
BreedTranslation using standard German cynology naming; the rest keep
the same name in both locales (correct for many FCI breeds, which
German-language sources don't translate either), falling back via
pickLocalizedName as designed.

Cat breeds: added all 39 remaining FIFe-recognized breeds (fetched from
fifeweb.org/cats/breeds/, 2026-08-23), bringing the total to 54. 21 get
a German translation.

Existing entries were left untouched (upsert is keyed on
speciesId+name) so no Pet.breedId reference breaks. Seed already run
against the shared dev/prod DB (idempotent, additive only) — verified
360/54 breed counts and 193/36 DE-translated counts post-run.
2026-08-23 16:35:46 +02:00

1074 lines
31 KiB
TypeScript

import { PrismaClient } from "@prisma/client";
import { PrismaPg } from "@prisma/adapter-pg";
import { Pool } from "pg";
/**
* Seed script for the PawFeed database.
* Seeds Species (Dog, Cat, Bird) and Breed taxonomy idempotently.
* Uses upsert so it is safe to run multiple times.
*
* Run: npx tsx prisma/seed.ts
* Or: npx prisma db seed
*/
const databaseUrl = process.env.DATABASE_URL;
if (!databaseUrl) {
throw new Error(
"DATABASE_URL is not set. Please add it to .env.local first."
);
}
const adapter = new PrismaPg(new Pool({ connectionString: databaseUrl }));
const prisma = new PrismaClient({ adapter });
const DOG_BREEDS = [
"Labrador Retriever",
"Golden Retriever",
"German Shepherd",
"French Bulldog",
"Bulldog",
"Poodle",
"Beagle",
"Rottweiler",
"German Shorthaired Pointer",
"Dachshund",
"Pembroke Welsh Corgi",
"Australian Shepherd",
"Yorkshire Terrier",
"Boxer",
"Cavalier King Charles Spaniel",
"Doberman Pinscher",
"Great Dane",
"Miniature Schnauzer",
"Siberian Husky",
"Border Collie",
// Remaining FCI-recognized breeds (Fédération Cynologique Internationale
// nomenclature, fetched from fci.be 2026-08-23) not already listed above.
"English Pointer",
"English Setter",
"Kerry Blue Terrier",
"Cairn Terrier",
"English Cocker Spaniel",
"Gordon Setter",
"Airedale Terrier",
"Australian Terrier",
"Bedlington Terrier",
"Border Terrier",
"Bull Terrier",
"Fox Terrier (Smooth)",
"English Toy Terrier (Black & Tan)",
"Swedish Vallhund",
"Belgian Shepherd Dog",
"Old English Sheepdog",
"Griffon Nivernais",
"Briquet Griffon Vendeen",
"Ariegeois",
"Gascon Saintongeois",
"Great Gascony Blue",
"Poitevin",
"Billy",
"Artois Hound",
"Porcelaine",
"Small Blue Gascony",
"Blue Gascony Griffon",
"Grand Basset Griffon Vendeen",
"Norman Artesien Basset",
"Blue Gascony Basset",
"Basset Fauve de Bretagne",
"Portuguese Water Dog",
"Welsh Corgi (Cardigan)",
"Irish Soft Coated Wheaten Terrier",
"Yugoslavian Shepherd Dog - Sharplanina",
"Jämthund",
"Basenji",
"Beauce Sheepdog",
"Bernese Mountain Dog",
"Appenzell Cattle Dog",
"Entlebuch Cattle Dog",
"Karelian Bear Dog",
"Finnish Spitz",
"Newfoundland",
"Finnish Hound",
"Polish Hound",
"Komondor",
"Kuvasz",
"Puli",
"Pumi",
"Hungarian Short-Haired Pointer (Vizsla)",
"Great Swiss Mountain Dog",
"Swiss Hound",
"Small Swiss Hound",
"St. Bernard",
"Coarse-Haired Styrian Hound",
"Austrian Black and Tan Hound",
"Austrian Pinscher",
"Maltese",
"Fawn Brittany Griffon",
"Petit Basset Griffon Vendeen",
"Tyrolean Hound",
"Lakeland Terrier",
"Manchester Terrier",
"Norwich Terrier",
"Scottish Terrier",
"Sealyham Terrier",
"Skye Terrier",
"Staffordshire Bull Terrier",
"Continental Toy Spaniel",
"Welsh Terrier",
"Griffon Bruxellois",
"Griffon Belge",
"Petit Brabançon",
"Schipperke",
"Bloodhound",
"West Highland White Terrier",
"Catalan Sheepdog",
"Shetland Sheepdog",
"Ibizan Podenco",
"Burgos Pointing Dog",
"Spanish Mastiff",
"Pyrenean Mastiff",
"Portuguese Sheepdog",
"Portuguese Warren Hound-Portuguese Podengo",
"Brittany Spaniel",
"Rafeiro of Alentejo",
"German Spitz",
"German Wire-Haired Pointing Dog",
"Weimaraner",
"Westphalian Dachsbracke",
"Kleiner Münsterländer",
"German Hunting Terrier",
"German Spaniel",
"French Water Dog",
"Blue Picardy Spaniel",
"Wire-Haired Pointing Griffon Korthals",
"Picardy Spaniel",
"Clumber Spaniel",
"Curly Coated Retriever",
"Briard",
"Pont-Audemer Spaniel",
"Saint Germain Pointer",
"Dogue de Bordeaux",
"Deutsch Langhaar",
"Large Munsterlander",
"Irish Red Setter",
"Flat Coated Retriever",
"Field Spaniel",
"Irish Water Spaniel",
"English Springer Spaniel",
"Welsh Springer Spaniel",
"Sussex Spaniel",
"King Charles Spaniel",
"Smålandsstövare",
"Drever",
"Schillerstövare",
"Hamiltonstövare",
"French Pointing Dog - Gascogne Type",
"French Pointing Dog - Pyrenean Type",
"Swedish Lapphund",
"Pyrenean Mountain Dog",
"Pyrenean Sheepdog - Smooth Faced",
"Irish Terrier",
"Boston Terrier",
"Long-Haired Pyrenean Sheepdog",
"Slovakian Chuvach",
"Leonberger",
"Rhodesian Ridgeback",
"Serbian Hound",
"Istrian Short-Haired Hound",
"Istrian Wire-Haired Hound",
"Dalmatian",
"Posavatz Hound",
"Bosnian Broken-Haired Hound - Called Barak",
"Collie Rough",
"Bullmastiff",
"Greyhound",
"English Foxhound",
"Irish Wolfhound",
"Whippet",
"Basset Hound",
"Deerhound",
"Italian Spinone",
"American Cocker Spaniel",
"Dandie Dinmont Terrier",
"Fox Terrier (Wire)",
"Castro Laboreiro Dog",
"Bouvier Des Ardennes",
"Estrela Mountain Dog",
"French Spaniel",
"Picardy Sheepdog",
"Ariege Pointing Dog",
"Bourbonnais Pointing Dog",
"Auvergne Pointer",
"Giant Schnauzer",
"Schnauzer",
"German Pinscher",
"Miniature Pinscher",
"Affenpinscher",
"Portuguese Pointing Dog",
"Sloughi",
"Finnish Lapponian Dog",
"Hovawart",
"Bouvier Des Flandres",
"Kromfohrländer",
"Borzoi - Russian Hunting Sighthound",
"Bergamasco Shepherd Dog",
"Italian Volpino",
"Bolognese",
"Neapolitan Mastiff",
"Italian Rough-Haired Segugio",
"Cirneco Dell'Etna",
"Italian Sighthound",
"Maremma and the Abruzzes Sheepdog",
"Italian Pointing Dog",
"Norwegian Hound",
"Spanish Hound",
"Chow Chow",
"Japanese Chin",
"Pekingese",
"Shih Tzu",
"Tibetan Terrier",
"Canadian Eskimo Dog",
"Samoyed",
"Hanoverian Scent Hound",
"Hellenic Hound",
"Bichon Frise",
"Pudelpointer",
"Bavarian Mountain Scent Hound",
"Chihuahua",
"French Tricolour Hound",
"French White & Black Hound",
"Wetterhoun",
"Stabijhoun",
"Dutch Shepherd Dog",
"Drentsche Partridge Dog",
"Fila Brasileiro",
"Landseer (European Continental Type)",
"Lhasa Apso",
"Afghan Hound",
"Serbian Tricolour Hound",
"Tibetan Mastiff",
"Tibetan Spaniel",
"Deutsch Stichelhaar",
"Little Lion Dog",
"Xoloitzcuintle",
"Australian Silky Terrier",
"Norwegian Buhund",
"Mudi",
"Hungarian Wire-Haired Pointer",
"Hungarian Greyhound",
"Hungarian Hound - Transylvanian Scent Hound",
"Norwegian Elkhound Grey",
"Alaskan Malamute",
"Slovakian Hound",
"Bohemian Wire-Haired Pointing Griffon",
"Cesky Terrier",
"Atlas Mountain Dog (Aidi)",
"Pharaoh Hound",
"Majorca Mastiff",
"Havanese",
"Polish Lowland Sheepdog",
"Polish Tatra Shepherd",
"Pug",
"Alpine Dachsbracke",
"Akita",
"Shiba",
"Japanese Terrier",
"Tosa",
"Hokkaido",
"Japanese Spitz",
"Chesapeake Bay Retriever",
"Mastiff",
"Norwegian Lundehund",
"Hygen Hound",
"Halden Hound",
"Norwegian Elkhound Black",
"Saluki",
"Bearded Collie",
"Norfolk Terrier",
"Canaan Dog",
"Greenland Dog",
"Brazilian Tracker",
"Norrbottenspitz",
"Croatian Shepherd Dog",
"Karst Shepherd Dog",
"Montenegrin Mountain Hound",
"Old Danish Pointing Dog",
"Grand Griffon Vendeen",
"Coton de Tulear",
"Lapponian Herder",
"Spanish Greyhound",
"American Staffordshire Terrier",
"Australian Cattle Dog",
"Chinese Crested Dog",
"Icelandic Sheepdog",
"Beagle Harrier",
"Eurasian",
"Dogo Argentino",
"Australian Kelpie",
"Otterhound",
"Harrier",
"Collie Smooth",
"Romagna Water Dog",
"German Hound",
"Black and Tan Coonhound",
"American Water Spaniel",
"Irish Glen of Imaal Terrier",
"American Foxhound",
"Russian-European Laika",
"East Siberian Laika",
"West Siberian Laika",
"Azawakh",
"Dutch Smoushond",
"Shar Pei",
"Peruvian Hairless Dog",
"Saarloos Wolfhond",
"Nova Scotia Duck Tolling Retriever",
"Dutch Schapendoes",
"Nederlandse Kooikerhondje",
"Broholmer",
"French White and Orange Hound",
"Kai",
"Kishu",
"Shikoku",
"Wirehaired Slovakian Pointer",
"Majorca Shepherd Dog",
"Great Anglo-French Tricolour Hound",
"Great Anglo-French White and Black Hound",
"Great Anglo-French White & Orange Hound",
"Medium-Sized Anglo-French Hound",
"South Russian Shepherd Dog",
"Russian Black Terrier",
"Caucasian Shepherd Dog",
"Canarian Warren Hound",
"Irish Red and White Setter",
"Kangal Shepherd Dog",
"Czechoslovakian Wolfdog",
"Polish Greyhound",
"Korea Jindo Dog",
"Central Asia Shepherd Dog",
"Spanish Water Dog",
"Italian Short-Haired Segugio",
"Thai Ridgeback Dog",
"Parson Russell Terrier",
"Saint Miguel Cattle Dog",
"Brazilian Terrier",
"Italian Cane Corso",
"American Akita",
"Jack Russell Terrier",
"Presa Canario",
"White Swiss Shepherd Dog",
"Taiwan Dog",
"Romanian Mioritic Shepherd Dog",
"Romanian Carpathian Shepherd Dog",
"Australian Stumpy Tail Cattle Dog",
"Russian Toy",
"Cimarrón Uruguayo",
"Polish Hunting Dog",
"Bosnian and Herzegovinian - Croatian Shepherd Dog",
"Danish-Swedish Farmdog",
"Romanian Bucovina Shepherd",
"Thai Bangkaew Dog",
"Miniature Bull Terrier",
"Lancashire Heeler",
"Segugio Maremmano",
"Kintamani-Bali Dog",
"Prague Ratter",
"Bohemian Shepherd Dog",
"Yakutian Laika",
"Estonian Hound",
"Miniature American Shepherd",
"Transmontano Mastiff",
"Continental Bulldog",
"Valencian Terrier",
"Andalusian Terrier, Sherry Terrier",
"Kazakh Tazy",
"Romanian Raven Shepherd Dog",
"Brazilian Campeiro Bulldog",
];
const CAT_BREEDS = [
"Domestic Shorthair",
"Domestic Longhair",
"Maine Coon",
"Ragdoll",
"Siamese",
"Persian",
"Bengal",
"British Shorthair",
"Sphynx",
"Scottish Fold",
"American Shorthair",
"Abyssinian",
"Norwegian Forest Cat",
"Birman",
"Russian Blue",
// Remaining FIFe-recognized breeds (Fédération Internationale Féline,
// fetched from fifeweb.org/cats/breeds/ 2026-08-23) not already listed above.
"Exotic Shorthair",
"Turkish Van",
"American Curl Longhair",
"American Curl Shorthair",
"LaPerm Longhair",
"LaPerm Shorthair",
"Neva Masquerade",
"Siberian",
"Turkish Angora",
"British Longhair",
"Burmilla",
"Burmese",
"Chartreux",
"Cymric",
"European",
"Kurilean Bobtail Longhair",
"Kurilean Bobtail Shorthair",
"Korat",
"Manx",
"Egyptian Mau",
"Ocicat",
"Singapura",
"Snowshoe",
"Sokoke",
"Selkirk Rex Longhair",
"Selkirk Rex Shorthair",
"Balinese",
"Cornish Rex",
"Devon Rex",
"Don Sphynx",
"German Rex",
"Japanese Bobtail Shorthair",
"Oriental Longhair",
"Oriental Shorthair",
"Peterbald",
"Somali",
"Thai",
"Bombay",
"Lykoi",
];
const BIRD_BREEDS = [
"Budgerigar (Budgie)",
"Cockatiel",
"Lovebird",
"African Grey Parrot",
"Cockatoo",
"Conure",
"Macaw",
"Canary",
"Finch",
"Amazon Parrot",
];
const HORSE_BREEDS = [
"Arabian Horse",
"Icelandic Horse",
"Shetland Pony",
"Haflinger",
"Friesian",
"Andalusian",
"Quarter Horse",
"Thoroughbred",
"Warmblood",
"Welsh Pony",
"Trakehner",
"Hanoverian",
];
const RABBIT_BREEDS = [
"Netherland Dwarf",
"Holland Lop",
"Lionhead Rabbit",
"Rex Rabbit",
"Angora Rabbit",
"Flemish Giant",
"Mini Rex",
"Dutch Rabbit",
];
const GUINEA_PIG_BREEDS = [
"American Guinea Pig",
"Abyssinian Guinea Pig",
"Peruvian Guinea Pig",
"Silkie Guinea Pig",
"Teddy Guinea Pig",
"Skinny Pig",
];
const HAMSTER_BREEDS = [
"Syrian Hamster",
"Roborovski Hamster",
"Campbell's Dwarf Hamster",
"Winter White Hamster",
"Chinese Hamster",
];
const MOUSE_BREEDS = [
"Fancy Mouse",
"Satin Mouse",
"Long-Haired Mouse",
"Hairless Mouse",
];
const RAT_BREEDS = [
"Standard Rat",
"Dumbo Rat",
"Hairless Rat",
"Rex Rat",
"Satin Rat",
];
const SNAKE_BREEDS = [
"Corn Snake",
"Ball Python",
"Boa Constrictor",
"King Snake",
"Milk Snake",
"Garter Snake",
];
const LIZARD_BREEDS = [
"Bearded Dragon",
"Green Iguana",
"Blue-Tongued Skink",
"Chameleon",
"Monitor Lizard",
];
const TURTLE_BREEDS = [
"Red-Eared Slider",
"Greek Tortoise",
"Hermann's Tortoise",
"Box Turtle",
"African Sulcata Tortoise",
];
const GECKO_BREEDS = [
"Leopard Gecko",
"Crested Gecko",
"Tokay Gecko",
"Day Gecko",
"Gargoyle Gecko",
];
const SPIDER_BREEDS = [
"Chilean Rose Tarantula",
"Mexican Red Knee Tarantula",
"Curly Hair Tarantula",
"Pink Toe Tarantula",
"Goliath Birdeater",
"Brazilian Black Tarantula",
];
const CHINCHILLA_BREEDS = [
"Standard Grey",
"Beige",
"White",
"Black Velvet",
"Violet",
"Sapphire",
"Ebony",
];
// The Species is the aquarium/tank as a whole (matches how aquarists
// actually showcase their hobby), not one profile per individual fish —
// "breed" here means the predominant fish species kept, same pattern as
// Bird covering many bird types via Breed.
const AQUARIUM_BREEDS = [
"Betta (Siamese Fighting Fish)",
"Guppy",
"Neon Tetra",
"Goldfish",
"Angelfish",
"Discus",
"Koi",
"Molly",
"Platy",
"Cichlid",
"Corydoras Catfish",
"Zebra Danio",
];
const SPECIES_DE: Record<string, string> = {
"Dog": "Hund",
"Cat": "Katze",
"Bird": "Vogel",
"Horse": "Pferd",
"Rabbit": "Kaninchen",
"Guinea Pig": "Meerschweinchen",
"Hamster": "Hamster",
"Mouse": "Maus",
"Rat": "Ratte",
"Snake": "Schlange",
"Lizard": "Echse",
"Turtle": "Schildkröte",
"Gecko": "Gecko",
"Spider": "Spinne",
"Chinchilla": "Chinchilla",
"Aquarium": "Aquarium",
};
const DOG_BREEDS_DE: Record<string, string> = {
"Labrador Retriever": "Labrador Retriever",
"Golden Retriever": "Golden Retriever",
"German Shepherd": "Deutscher Schäferhund",
"French Bulldog": "Französische Bulldogge",
"Bulldog": "Bulldogge",
"Poodle": "Pudel",
"Beagle": "Beagle",
"Rottweiler": "Rottweiler",
"German Shorthaired Pointer": "Deutsch Kurzhaar",
"Dachshund": "Dackel",
"Pembroke Welsh Corgi": "Pembroke Welsh Corgi",
"Australian Shepherd": "Australian Shepherd",
"Yorkshire Terrier": "Yorkshire Terrier",
"Boxer": "Boxer",
"Cavalier King Charles Spaniel": "Cavalier King Charles Spaniel",
"Doberman Pinscher": "Dobermann",
"Great Dane": "Deutsche Dogge",
"Miniature Schnauzer": "Zwergschnauzer",
"Siberian Husky": "Sibirischer Husky",
"Border Collie": "Border Collie",
"English Cocker Spaniel": "Englischer Cocker Spaniel",
"Fox Terrier (Smooth)": "Foxterrier (Glatthaar)",
"English Toy Terrier (Black & Tan)": "Englischer Toy Terrier (Black & Tan)",
"Swedish Vallhund": "Schwedischer Wallhund",
"Belgian Shepherd Dog": "Belgischer Schäferhund",
"Old English Sheepdog": "Bobtail",
"Portuguese Water Dog": "Portugiesischer Wasserhund",
"Welsh Corgi (Cardigan)": "Welsh Corgi Cardigan",
"Beauce Sheepdog": "Beauceron",
"Bernese Mountain Dog": "Berner Sennenhund",
"Appenzell Cattle Dog": "Appenzeller Sennenhund",
"Entlebuch Cattle Dog": "Entlebucher Sennenhund",
"Karelian Bear Dog": "Karelischer Bärenhund",
"Finnish Spitz": "Finnenspitz",
"Newfoundland": "Neufundländer",
"Finnish Hound": "Finnischer Laufhund",
"Polish Hound": "Polnischer Laufhund",
"Hungarian Short-Haired Pointer (Vizsla)": "Ungarischer Kurzhaariger Vorstehhund (Vizsla)",
"Great Swiss Mountain Dog": "Großer Schweizer Sennenhund",
"Swiss Hound": "Schweizer Laufhund",
"Small Swiss Hound": "Kleiner Schweizer Laufhund",
"St. Bernard": "Bernhardiner",
"Coarse-Haired Styrian Hound": "Steirische Rauhaarbracke",
"Austrian Black and Tan Hound": "Brandlbracke",
"Austrian Pinscher": "Österreichischer Pinscher",
"Maltese": "Malteser",
"Tyrolean Hound": "Tiroler Bracke",
"Continental Toy Spaniel": "Kontinentaler Zwergspaniel (Papillon/Phalène)",
"Griffon Bruxellois": "Brüsseler Griffon",
"Griffon Belge": "Belgischer Griffon",
"Petit Brabançon": "Kleiner Brabanter",
"Catalan Sheepdog": "Katalanischer Schäferhund",
"Ibizan Podenco": "Ibiza-Podenco",
"Burgos Pointing Dog": "Burgos-Vorstehhund",
"Spanish Mastiff": "Spanischer Mastiff",
"Pyrenean Mastiff": "Pyrenäen-Mastiff",
"Portuguese Sheepdog": "Portugiesischer Schäferhund",
"Portuguese Warren Hound-Portuguese Podengo": "Portugiesischer Podengo",
"Brittany Spaniel": "Bretonischer Spaniel",
"German Spitz": "Deutscher Spitz",
"German Wire-Haired Pointing Dog": "Deutsch Drahthaar",
"Westphalian Dachsbracke": "Westfälische Dachsbracke",
"German Hunting Terrier": "Deutscher Jagdterrier",
"German Spaniel": "Deutscher Wachtelhund",
"French Water Dog": "Barbet",
"Blue Picardy Spaniel": "Blauer Picardie-Spaniel",
"Picardy Spaniel": "Picardie-Spaniel",
"Pont-Audemer Spaniel": "Pont-Audemer-Spaniel",
"Large Munsterlander": "Großer Münsterländer",
"Irish Red Setter": "Irish Setter",
"Pyrenean Mountain Dog": "Pyrenäenberghund",
"Pyrenean Sheepdog - Smooth Faced": "Pyrenäen-Schäferhund, kurzhaarig",
"Long-Haired Pyrenean Sheepdog": "Pyrenäen-Schäferhund, langhaarig",
"Slovakian Chuvach": "Slowakischer Tschuvatsch",
"Istrian Short-Haired Hound": "Istrianer Kurzhaariger Laufhund",
"Istrian Wire-Haired Hound": "Istrianer Rauhaariger Laufhund",
"Dalmatian": "Dalmatiner",
"Bosnian Broken-Haired Hound - Called Barak": "Bosnischer Rauhaariger Laufhund (Barak)",
"Collie Rough": "Collie Langhaar",
"Fox Terrier (Wire)": "Foxterrier (Drahthaar)",
"Castro Laboreiro Dog": "Castro-Laboreiro-Hund",
"Bouvier Des Ardennes": "Ardennen-Bouvier",
"Estrela Mountain Dog": "Estrela-Berghund",
"French Spaniel": "Französischer Spaniel",
"Picardy Sheepdog": "Picardie-Schäferhund",
"Giant Schnauzer": "Riesenschnauzer",
"German Pinscher": "Deutscher Pinscher",
"Miniature Pinscher": "Zwergpinscher",
"Borzoi - Russian Hunting Sighthound": "Barsoi",
"Bergamasco Shepherd Dog": "Bergamasker Hirtenhund",
"Bolognese": "Bologneser",
"Neapolitan Mastiff": "Neapolitanischer Mastiff",
"Italian Sighthound": "Italienisches Windspiel",
"Maremma and the Abruzzes Sheepdog": "Maremmen-Abruzzen-Schäferhund",
"Norwegian Hound": "Norwegischer Laufhund",
"Spanish Hound": "Spanischer Laufhund",
"Pekingese": "Pekinese",
"Canadian Eskimo Dog": "Kanadischer Eskimohund",
"Samoyed": "Samojede",
"Hanoverian Scent Hound": "Hannoverscher Schweißhund",
"Hellenic Hound": "Griechischer Laufhund",
"Bavarian Mountain Scent Hound": "Bayerischer Gebirgsschweißhund",
"French Tricolour Hound": "Französischer Dreifarbiger Laufhund",
"French White & Black Hound": "Französischer Weiß-Schwarzer Laufhund",
"Dutch Shepherd Dog": "Holländischer Schäferhund",
"Fila Brasileiro": "Brasilianischer Fila",
"Landseer (European Continental Type)": "Landseer (Kontinentaler Typ)",
"Afghan Hound": "Afghanischer Windhund",
"Serbian Tricolour Hound": "Serbischer Dreifarbiger Laufhund",
"Tibetan Mastiff": "Tibet-Dogge",
"Tibetan Spaniel": "Tibet-Spaniel",
"Little Lion Dog": "Löwchen",
"Hungarian Wire-Haired Pointer": "Ungarischer Drahthaariger Vorstehhund",
"Hungarian Greyhound": "Ungarischer Windhund",
"Hungarian Hound - Transylvanian Scent Hound": "Siebenbürgische Bracke",
"Norwegian Elkhound Grey": "Grauer Norwegischer Elchhund",
"Slovakian Hound": "Slowakische Bracke",
"Cesky Terrier": "Tschechischer Terrier",
"Atlas Mountain Dog (Aidi)": "Atlas-Schäferhund (Aidi)",
"Pharaoh Hound": "Pharaonenhund",
"Majorca Mastiff": "Mallorquinischer Dogo",
"Havanese": "Havaneser",
"Polish Lowland Sheepdog": "Polnischer Niederungshütehund",
"Polish Tatra Shepherd": "Polnischer Tatra-Schäferhund",
"Pug": "Mops",
"Alpine Dachsbracke": "Alpenländische Dachsbracke",
"Japanese Terrier": "Japan Terrier",
"Tosa": "Tosa Inu",
"Mastiff": "Englische Dogge",
"Hygen Hound": "Hygenhund",
"Norwegian Elkhound Black": "Schwarzer Norwegischer Elchhund",
"Canaan Dog": "Kanaan-Hund",
"Greenland Dog": "Grönlandhund",
"Brazilian Tracker": "Brasilianischer Laufhund",
"Croatian Shepherd Dog": "Kroatischer Schäferhund",
"Karst Shepherd Dog": "Karst-Schäferhund",
"Montenegrin Mountain Hound": "Montenegrinischer Gebirgslaufhund",
"Old Danish Pointing Dog": "Alter Dänischer Vorstehhund",
"Spanish Greyhound": "Galgo Español",
"Chinese Crested Dog": "Chinesischer Schopfhund",
"Icelandic Sheepdog": "Isländischer Schäferhund",
"Eurasian": "Eurasier",
"Dogo Argentino": "Argentinische Dogge",
"Collie Smooth": "Collie Kurzhaar",
"Romagna Water Dog": "Lagotto Romagnolo",
"German Hound": "Deutsche Bracke",
"Irish Glen of Imaal Terrier": "Glen of Imaal Terrier",
"Russian-European Laika": "Russisch-Europäische Laika",
"East Siberian Laika": "Ostsibirische Laika",
"West Siberian Laika": "Westsibirische Laika",
"Dutch Smoushond": "Holländischer Smoushond",
"Peruvian Hairless Dog": "Peruanischer Nackthund",
"Saarloos Wolfhond": "Saarloos-Wolfhund",
"Dutch Schapendoes": "Schapendoes",
"Nederlandse Kooikerhondje": "Kooikerhondje",
"French White and Orange Hound": "Französischer Weiß-Oranger Laufhund",
"Kai": "Kai Ken",
"Kishu": "Kishu Ken",
"Shikoku": "Shikoku Ken",
"Wirehaired Slovakian Pointer": "Slowakischer Rauhbart",
"Majorca Shepherd Dog": "Mallorquinischer Schäferhund",
"Great Anglo-French Tricolour Hound": "Anglo-Französischer Laufhund, groß, dreifarbig",
"Great Anglo-French White and Black Hound": "Anglo-Französischer Laufhund, groß, weiß-schwarz",
"Great Anglo-French White & Orange Hound": "Anglo-Französischer Laufhund, groß, weiß-orange",
"Medium-Sized Anglo-French Hound": "Anglo-Französischer Laufhund, mittelgroß",
"South Russian Shepherd Dog": "Südrussischer Owtscharka",
"Russian Black Terrier": "Schwarzer Russischer Terrier",
"Caucasian Shepherd Dog": "Kaukasischer Owtscharka",
"Kangal Shepherd Dog": "Kangal",
"Czechoslovakian Wolfdog": "Tschechoslowakischer Wolfhund",
"Korea Jindo Dog": "Koreanischer Jindo-Hund",
"Central Asia Shepherd Dog": "Zentralasiatischer Owtscharka",
"Spanish Water Dog": "Spanischer Wasserhund",
"Thai Ridgeback Dog": "Thai Ridgeback",
"Italian Cane Corso": "Cane Corso",
"Presa Canario": "Perro de Presa Canario",
"White Swiss Shepherd Dog": "Weißer Schweizer Schäferhund",
"Taiwan Dog": "Taiwan-Hund",
"Romanian Mioritic Shepherd Dog": "Mioritischer Schäferhund",
"Romanian Carpathian Shepherd Dog": "Karpaten-Schäferhund",
"Polish Hunting Dog": "Polnischer Jagdhund",
"Bosnian and Herzegovinian - Croatian Shepherd Dog": "Bosnisch-Herzegowinisch-Kroatischer Schäferhund",
"Danish-Swedish Farmdog": "Dänisch-Schwedischer Farmhund",
"Romanian Bucovina Shepherd": "Bukowina-Schäferhund",
"Thai Bangkaew Dog": "Thai Bangkaew",
"Miniature Bull Terrier": "Bull Terrier Mini",
"Kintamani-Bali Dog": "Kintamani-Bali-Hund",
"Prague Ratter": "Prager Rattler",
"Bohemian Shepherd Dog": "Böhmischer Schäferhund",
"Yakutian Laika": "Jakutische Laika",
"Estonian Hound": "Estnische Bracke",
"Andalusian Terrier, Sherry Terrier": "Andalusischer Terrier",
"Kazakh Tazy": "Kasachischer Tasy",
};
const CAT_BREEDS_DE: Record<string, string> = {
"Domestic Shorthair": "Europäisch Kurzhaar",
"Domestic Longhair": "Europäisch Langhaar",
"Maine Coon": "Maine Coon",
"Ragdoll": "Ragdoll",
"Siamese": "Siamkatze",
"Persian": "Perserkatze",
"Bengal": "Bengalkatze",
"British Shorthair": "Britisch Kurzhaar",
"Sphynx": "Sphynx",
"Scottish Fold": "Scottish Fold",
"American Shorthair": "Amerikanisch Kurzhaar",
"Abyssinian": "Abessinier",
"Norwegian Forest Cat": "Norwegische Waldkatze",
"Birman": "Heilige Birma",
"Russian Blue": "Russisch Blau",
"Turkish Van": "Türkisch Van",
"American Curl Longhair": "Amerikanisch Curl Langhaar",
"American Curl Shorthair": "Amerikanisch Curl Kurzhaar",
"LaPerm Longhair": "LaPerm Langhaar",
"LaPerm Shorthair": "LaPerm Kurzhaar",
"Siberian": "Sibirische Katze",
"Turkish Angora": "Türkisch Angora",
"British Longhair": "Britisch Langhaar",
"Burmese": "Burma-Katze",
"Chartreux": "Kartäuser",
"European": "Europäisch Kurzhaar",
"Kurilean Bobtail Longhair": "Kurilen-Bobtail Langhaar",
"Kurilean Bobtail Shorthair": "Kurilen-Bobtail Kurzhaar",
"Egyptian Mau": "Ägyptische Mau",
"Selkirk Rex Longhair": "Selkirk Rex Langhaar",
"Selkirk Rex Shorthair": "Selkirk Rex Kurzhaar",
"German Rex": "Deutsch Rex",
"Japanese Bobtail Shorthair": "Japanese Bobtail Kurzhaar",
"Oriental Longhair": "Orientalisch Langhaar",
"Oriental Shorthair": "Orientalisch Kurzhaar",
"Thai": "Thai-Katze",
};
const BIRD_BREEDS_DE: Record<string, string> = {
"Budgerigar (Budgie)": "Wellensittich",
"Cockatiel": "Nymphensittich",
"Lovebird": "Unzertrennliche",
"African Grey Parrot": "Graupapagei",
"Cockatoo": "Kakadu",
"Conure": "Sittich",
"Macaw": "Ara",
"Canary": "Kanarienvogel",
"Finch": "Fink",
"Amazon Parrot": "Amazone",
};
const HORSE_BREEDS_DE: Record<string, string> = {
"Arabian Horse": "Araber",
"Icelandic Horse": "Islandpferd",
"Shetland Pony": "Shetlandpony",
"Haflinger": "Haflinger",
"Friesian": "Friese",
"Andalusian": "Andalusier",
"Quarter Horse": "Quarter Horse",
"Thoroughbred": "Englisches Vollblut",
"Warmblood": "Warmblut",
"Welsh Pony": "Welsh Pony",
"Trakehner": "Trakehner",
"Hanoverian": "Hannoveraner",
};
const RABBIT_BREEDS_DE: Record<string, string> = {
"Netherland Dwarf": "Hollandzwerg",
"Holland Lop": "Widderkaninchen",
"Lionhead Rabbit": "Löwenkopfkaninchen",
"Rex Rabbit": "Rex-Kaninchen",
"Angora Rabbit": "Angorakaninchen",
"Flemish Giant": "Deutscher Riese",
"Mini Rex": "Mini Rex",
"Dutch Rabbit": "Holländer",
};
const GUINEA_PIG_BREEDS_DE: Record<string, string> = {
"American Guinea Pig": "Glatthaarmeerschweinchen",
"Abyssinian Guinea Pig": "Rosettenmeerschweinchen",
"Peruvian Guinea Pig": "Perumeerschweinchen",
"Silkie Guinea Pig": "Silkie",
"Teddy Guinea Pig": "Teddymeerschweinchen",
"Skinny Pig": "Skinny Pig",
};
const HAMSTER_BREEDS_DE: Record<string, string> = {
"Syrian Hamster": "Goldhamster",
"Roborovski Hamster": "Roborowski-Zwerghamster",
"Campbell's Dwarf Hamster": "Campbell-Zwerghamster",
"Winter White Hamster": "Dsungarischer Zwerghamster",
"Chinese Hamster": "Chinesischer Streifenhamster",
};
const MOUSE_BREEDS_DE: Record<string, string> = {
"Fancy Mouse": "Farbmaus",
"Satin Mouse": "Satinmaus",
"Long-Haired Mouse": "Langhaarmaus",
"Hairless Mouse": "Nacktmaus",
};
const RAT_BREEDS_DE: Record<string, string> = {
"Standard Rat": "Standardratte",
"Dumbo Rat": "Dumbo-Ratte",
"Hairless Rat": "Nacktratte",
"Rex Rat": "Rex-Ratte",
"Satin Rat": "Satin-Ratte",
};
const SNAKE_BREEDS_DE: Record<string, string> = {
"Corn Snake": "Kornnatter",
"Ball Python": "Königspython",
"Boa Constrictor": "Abgottschlange",
"King Snake": "Königsnatter",
"Milk Snake": "Milchschlange",
"Garter Snake": "Strumpfbandnatter",
};
const LIZARD_BREEDS_DE: Record<string, string> = {
"Bearded Dragon": "Bartagame",
"Green Iguana": "Grüner Leguan",
"Blue-Tongued Skink": "Blauzungenskink",
"Chameleon": "Chamäleon",
"Monitor Lizard": "Waran",
};
const TURTLE_BREEDS_DE: Record<string, string> = {
"Red-Eared Slider": "Rotwangen-Schmuckschildkröte",
"Greek Tortoise": "Griechische Landschildkröte",
"Hermann's Tortoise": "Griechische Landschildkröte (Testudo hermanni)",
"Box Turtle": "Dosenschildkröte",
"African Sulcata Tortoise": "Spornschildkröte",
};
const GECKO_BREEDS_DE: Record<string, string> = {
"Leopard Gecko": "Leopardgecko",
"Crested Gecko": "Kronengecko",
"Tokay Gecko": "Tokeh",
"Day Gecko": "Taggecko",
"Gargoyle Gecko": "Gargoyle-Gecko",
};
const SPIDER_BREEDS_DE: Record<string, string> = {
"Chilean Rose Tarantula": "Chilenische Rosenhaarvogelspinne",
"Mexican Red Knee Tarantula": "Mexikanische Rotknievogelspinne",
"Curly Hair Tarantula": "Lockenhaarvogelspinne",
"Pink Toe Tarantula": "Antillen-Baumvogelspinne",
"Goliath Birdeater": "Goliath-Vogelspinne",
"Brazilian Black Tarantula": "Brasilianische Schwarze Vogelspinne",
};
const CHINCHILLA_BREEDS_DE: Record<string, string> = {
"Standard Grey": "Standardgrau",
"Beige": "Beige",
"White": "Weiß",
"Black Velvet": "Black Velvet",
"Violet": "Violett",
"Sapphire": "Saphir",
"Ebony": "Ebony",
};
const AQUARIUM_BREEDS_DE: Record<string, string> = {
"Betta (Siamese Fighting Fish)": "Kampffisch",
"Guppy": "Guppy",
"Neon Tetra": "Neonsalmler",
"Goldfish": "Goldfisch",
"Angelfish": "Skalar",
"Discus": "Diskusfisch",
"Koi": "Koi",
"Molly": "Molly",
"Platy": "Platy",
"Cichlid": "Buntbarsch",
"Corydoras Catfish": "Panzerwels",
"Zebra Danio": "Zebrabärbling",
};
const BREED_DE_BY_SPECIES: Record<string, Record<string, string>> = {
"Dog": DOG_BREEDS_DE,
"Cat": CAT_BREEDS_DE,
"Bird": BIRD_BREEDS_DE,
"Horse": HORSE_BREEDS_DE,
"Rabbit": RABBIT_BREEDS_DE,
"Guinea Pig": GUINEA_PIG_BREEDS_DE,
"Hamster": HAMSTER_BREEDS_DE,
"Mouse": MOUSE_BREEDS_DE,
"Rat": RAT_BREEDS_DE,
"Snake": SNAKE_BREEDS_DE,
"Lizard": LIZARD_BREEDS_DE,
"Turtle": TURTLE_BREEDS_DE,
"Gecko": GECKO_BREEDS_DE,
"Spider": SPIDER_BREEDS_DE,
"Chinchilla": CHINCHILLA_BREEDS_DE,
"Aquarium": AQUARIUM_BREEDS_DE,
};
async function main() {
console.log("Seeding species...");
const speciesData = [
{ name: "Dog", breeds: DOG_BREEDS },
{ name: "Cat", breeds: CAT_BREEDS },
{ name: "Bird", breeds: BIRD_BREEDS },
{ name: "Horse", breeds: HORSE_BREEDS },
{ name: "Rabbit", breeds: RABBIT_BREEDS },
{ name: "Guinea Pig", breeds: GUINEA_PIG_BREEDS },
{ name: "Hamster", breeds: HAMSTER_BREEDS },
{ name: "Mouse", breeds: MOUSE_BREEDS },
{ name: "Rat", breeds: RAT_BREEDS },
{ name: "Snake", breeds: SNAKE_BREEDS },
{ name: "Lizard", breeds: LIZARD_BREEDS },
{ name: "Turtle", breeds: TURTLE_BREEDS },
{ name: "Gecko", breeds: GECKO_BREEDS },
{ name: "Spider", breeds: SPIDER_BREEDS },
{ name: "Chinchilla", breeds: CHINCHILLA_BREEDS },
{ name: "Aquarium", breeds: AQUARIUM_BREEDS },
];
for (const s of speciesData) {
const species = await prisma.species.upsert({
where: { name: s.name },
update: {},
create: { name: s.name },
});
console.log(` Upserted species: ${species.name} (${species.id})`);
const deSpeciesName = SPECIES_DE[s.name];
if (deSpeciesName) {
await prisma.speciesTranslation.upsert({
where: { speciesId_locale: { speciesId: species.id, locale: "de" } },
update: { name: deSpeciesName },
create: { speciesId: species.id, locale: "de", name: deSpeciesName },
});
}
console.log(` Seeding ${s.breeds.length} breeds for ${species.name}...`);
const breedDeMap = BREED_DE_BY_SPECIES[s.name] ?? {};
for (const breedName of s.breeds) {
const breed = await prisma.breed.upsert({
where: { speciesId_name: { speciesId: species.id, name: breedName } },
update: {},
create: { speciesId: species.id, name: breedName },
});
const deBreedName = breedDeMap[breedName];
if (deBreedName) {
await prisma.breedTranslation.upsert({
where: { breedId_locale: { breedId: breed.id, locale: "de" } },
update: { name: deBreedName },
create: { breedId: breed.id, locale: "de", name: deBreedName },
});
}
console.log(` Upserted breed: ${breed.name}`);
}
}
console.log("Seeding complete.");
}
main()
.catch((e) => {
console.error(e);
process.exit(1);
})
.finally(async () => {
await prisma.$disconnect();
});