We are going to create the start of a database on mechanical keyboard switches. I am wanting to get as much information as possible, but accuracy is more important than quantity. If you do not have information about a specific characteristic, leaving it empty is a perfect response. The site is just a fun resource for keyboard/switch enthousiest. The data will be used to help visitors find switches they might like. They will also be able to make list of switches that they own and want to get still.
No need to provide an ID, CreatedAt or UpdatedAt they will be generated by the DB. For timestamps, please use the 2024-08-05 12:42:33.170598+00 format
-
Data Sources: Are there specific sources or websites you'd like me to use for gathering the switch information? Some popular ones include Reddit's Mechanical Keyboard subreddit, GeekHack forums, and vendors like NovelKeys and MechanicalKeyboards.com.
-
Accuracy: Since accuracy is important, should we prioritize official specifications from the manufacturer's website over user-generated content like reviews or forum posts?
-
Switch Characteristics: Are there any specific characteristics you want to ensure are included for each switch beyond what you’ve listed, such as actuation force, travel distance, or specific materials used in the stem or housing?
4 .Price Point Definition: How do you define the "PricePoint" for the switches? For example, is there a specific price range for each category (1 - value, 2 - average, 3 - expensive)?
-
Unique Attributes: Are there any unique attributes or features you're interested in capturing, such as RGB support, hot-swap compatibility, or specific market trends?
-
Switches to Start With: Do you have a list of switches or brands you'd like to start with? We could begin with popular ones like Cherry MX, Gateron, and Kailh switches.
-
Database Structure: You've provided a comprehensive Go struct for the Switch type, but do you have a specific structure in mind for how you'd like to store additional attributes or detailed specifications?
-
Images: Would you like to include images of the switches or a link to an image gallery as part of the data?
Any source is fine. 2. Yes, I would prioritize what the manufacture says first, but other resources are fine. 3. No, we will do this later. Right now just getting the basics. 4. I don't have a good reference, this can be generalized/estimates its the one value that accuracy is ok, best. Best guess is fine. 5. Not at this time, just getting general information. 6. Yes, I will provide that. We wont get everything at once. 7. Yes, there will be a separate table handling the characteristics of the switch, right not just getting the list of switches and basic information. 8. Do not provide images at this time
Below I have included the base to use for building the switch data, which please provide as a Go slice. A summary or providing a full file is not needed, can just provide the go slice. Here is an example output thats expected.
gaterons := []Switch{
{
Name: "Gateron Red",
ShortDescription: "Linear switch with a light actuation force.",
LongDescription: "Gateron Red switches are known for their smooth linear action and light actuation force, making them ideal for gaming and typing.",
ManufacturerID: ptr(2), // Gateron
BrandID: ptr(2), // Gateron
SwitchTypeID: 1, // Linear
ReleaseDate: parseDate("2014-01-01"),
Available: true,
PricePoint: 1, // Value
},
{
Name: "Gateron Melodic",
ShortDescription: "Tactile switch with a musical sound profile and smooth operation.",
LongDescription: "The Gateron Melodic switch offers a tactile typing experience with a unique musical sound profile, providing a distinctive typing experience.",
ManufacturerID: ptr(2), // Gateron
BrandID: ptr(2), // Gateron
SwitchTypeID: 2, // Tactile
ReleaseDate: parseDate("2021-01-01"),
Available: true,
PricePoint: 3, // Expensive
},
{
Name: "Gateron KS-9 Red",
ShortDescription: "Linear switch with improved smoothness and sound.",
LongDescription: "Gateron KS-9 Red switches are enhanced linear switches known for their improved smoothness and sound, offering an upgraded typing experience.",
ManufacturerID: ptr(2), // Gateron
BrandID: ptr(2), // Gateron
SwitchTypeID: 1, // Linear
ReleaseDate: parseDate("2020-01-01"),
Available: true,
PricePoint: 2, // Average
},
}
Here are the helper functions for reference, they do not need to be included in results:
func ptr(i int) *int {
return &i
}
func parseDate(date string) *time.Time {
t, _ := time.Parse("2006-01-02", date)
return &t
}
Here is the switch struct that we are working with
type Switch struct {
ID uuid.UUID `gorm:"type:uuid;default:uuid_generate_v7();primaryKey" json:"id"`
Name string `gorm:"type:varchar(50);not null;index:idx_name;uniqueIndex:idx_name_manufacturer_brand" json:"name"`
ShortDescription string `gorm:"type:varchar(255);not null" json:"shortDescription"`
LongDescription string `gorm:"type:text;not null" json:"longDescription"`
ManufacturerID *int `gorm:"type:int;index;uniqueIndex:idx_name_manufacturer_brand" json:"manufacturerId,omitempty"`
Manufacturer *Producer `gorm:"foreignKey:ManufacturerID" json:"manufacturer,omitempty"`
BrandID *int `gorm:"type:int;index;uniqueIndex:idx_name_manufacturer_brand" json:"brandId,omitempty"`
Brand *Producer `gorm:"foreignKey:BrandID" json:"brand,omitempty"`
SwitchTypeID int `gorm:"type:int;not null;index;" json:"switchTypeId"`
SwitchType *Type `gorm:"foreignKey:SwitchTypeID" json:"switchType,omitempty"`
ReleaseDate *time.Time `gorm:"type:date" json:"releaseDate,omitempty"`
Available bool `gorm:"type:boolean;default:true" json:"available"`
PricePoint int `gorm:"type:int;not null" json:"pricePoint"`
CreatedAt time.Time `gorm:"autoCreateTime" json:"createdAt"`
UpdatedAt time.Time `gorm:"autoUpdateTime" json:"updatedAt"`
}
Name - Common name of the switch ShortDescription - This is a simple and small description of the switch, please keep this to less than 255 characters LongDescription - This is a more detailed description of the switch and can be as long as needed to describe the data. ManufacturerID - References the id from the producers table and is for who actually manufacturers the switch BrandID - References the id from the producers table and indicates the brand the switch is sold under. This can be the same as the manufacturer SwitchTypeID - This references the id from the types data, specificially the ones from the switch_type category ReleaseDate - When was the switch made available. Note: Rough estimates are ok for this field and not critical Available - Is the switch currently available PricePoint - This is an int from 1 - 3. 1 is a value switch, 2 is average costing switch and 3 is an expensive switch
Types Data
[
{ "id": "1", "name": "Linear", "code": "linear", "category": "switch_type" },
{
"id": "2",
"name": "Tactile",
"code": "tactile",
"category": "switch_type"
},
{ "id": "3", "name": "Clicky", "code": "clicky", "category": "switch_type" },
{
"id": "4",
"name": "Silent Linear",
"code": "silent_linear",
"category": "switch_type"
},
{
"id": "5",
"name": "Silent Tactile",
"code": "silent_tactile",
"category": "switch_type"
},
{
"id": "6",
"name": "Linear",
"code": "spring_linear",
"category": "spring_type"
},
{
"id": "7",
"name": "Progressive",
"code": "progressive",
"category": "spring_type"
},
{ "id": "8", "name": "Slow", "code": "slow", "category": "spring_type" },
{ "id": "9", "name": "Fast", "code": "fast", "category": "spring_type" },
{
"id": "10",
"name": "Variable",
"code": "variable",
"category": "spring_type"
},
{
"id": "11",
"name": "Balanced",
"code": "balanced",
"category": "spring_type"
},
{ "id": "12", "name": "Soft", "code": "soft", "category": "spring_type" },
{ "id": "13", "name": "Heavy", "code": "heavy", "category": "spring_type" },
{ "id": "14", "name {
Name: "Chosfox White Fox",
ShortDescription: "Tactile switch with a smooth bump and quiet operation.",
LongDescription: "Chosfox White Fox switches offer a smooth tactile bump and quiet operation, featuring a 58g actuation force. Ideal for users who enjoy a soft tactile feel with minimal noise.",
ManufacturerID: ptr(22), // JWK
BrandID: ptr(18), // Chosfox
SwitchTypeID: 2, // Tactile
ReleaseDate: parseDate("2023-01-15"),
Available: true,
PricePoint: 2, // Average
},
{
Name: "Chosfox Arctic Fox",
ShortDescription: "Linear switch with a cool feel and light actuation force.",
LongDescription: "Chosfox Arctic Fox switches provide a cool linear feel with a light 48g actuation force. Perfect for users who prefer a gentle and smooth keystroke.",
ManufacturerID: ptr(22), // JWK
BrandID: ptr(18), // Chosfox
SwitchTypeID: 1, // Linear
ReleaseDate: parseDate("2023-02-10"),
Available: true,
PricePoint: 2, // Average
},
{
Name: "Chosfox Voyager V2",
ShortDescription: "Linear switch designed for smooth and consistent travel.",
LongDescription: "Chosfox Voyager V2 switches offer a smooth and consistent linear travel with a 65g actuation force, providing a balanced and fluid typing experience.",
ManufacturerID: ptr(22), // JWK
BrandID: ptr(18), // Chosfox
SwitchTypeID: 1, // Linear
ReleaseDate: parseDate("2023-04-20"),
Available: true,
PricePoint: 2, // Average
},
{
Name: "Chosfox Hanami Dango",
ShortDescription: "Linear switch with soft feel and pastel aesthetics.",
LongDescription: "Chosfox Hanami Dango switches offer a soft linear feel with pastel aesthetics, featuring a 50g actuation force. Perfect for users who appreciate a gentle touch and pleasing visuals.",
ManufacturerID: ptr(22), // JWK
BrandID: ptr(18), // Chosfox
SwitchTypeID: 1, // Linear
ReleaseDate: parseDate("2023-05-15"),
Available: true,
PricePoint: 3, // Expensive
},
{
Name: "Chosfox Summer Lime Silent",
ShortDescription: "Silent linear switch with a soft and quiet typing experience.",
LongDescription: "Chosfox Summer Lime Silent switches provide a silent linear experience with a soft and quiet 40g actuation force, ideal for users who need a noiseless typing environment.",
ManufacturerID: ptr(22), // JWK
BrandID: ptr(18), // Chosfox
SwitchTypeID: 4, // Silent Linear
ReleaseDate: parseDate("2023-07-01"),
Available: true,
PricePoint: 3, // Expensive
},
{
Name: "Chosfox Poison Gas",
ShortDescription: "Tactile switch with strong feedback and vibrant color scheme.",
LongDescription: "Chosfox Poison Gas switches offer a strong tactile feedback with a vibrant color scheme, featuring a 67g actuation force. Ideal for users who enjoy pronounced tactile sensations.",
ManufacturerID: ptr(22), // JWK
BrandID: ptr(18), // Chosfox
SwitchTypeID: 2, // Tactile
ReleaseDate: parseDate("2023-08-10"),
Available: true,
PricePoint: 2, // Average
},
{
Name: "Chosfox DD Jingle Linear",
ShortDescription: "Linear switch with a unique auditory profile and smooth action.",
LongDescription: "Chosfox DD Jingle Linear switches provide a unique auditory profile with smooth linear action, featuring a 55g actuation force. Perfect for users who enjoy distinct sounds and smooth keystrokes.",
ManufacturerID: ptr(22), // JWK
BrandID: ptr(18), // Chosfox
SwitchTypeID: 1, // Linear
ReleaseDate: parseDate("2023-09-05"),
Available: true,
PricePoint: 3, // Expensive
},": "Custom", "code": "custom", "category": "spring_type" },
{
"id": "15",
"name": "Dual-Stage",
"code": "dual_stage",
"category": "spring_type"
},
{
"id": "16",
"name": "Triple-Stage",
"code": "triple_stage",
"category": "spring_type"
},
{
"id": "17",
"name": "Steel",
"code": "steel",
"category": "spring_material"
},
{
"id": "18",
"name": "Gold-Plated Steel",
"code": "gold_plated_steel",
"category": "spring_material"
},
{
"id": "19",
"name": "Copper",
"code": "copper",
"category": "spring_material"
},
{
"id": "20",
"name": "Phosphor Bronze",
"code": "phosphor_bronze",
"category": "spring_material"
},
{
"id": "21",
"name": "Stainless Steel",
"code": "stainless_steel",
"category": "spring_material"
},
{ "id": "22", "name": "ABS", "code": "abs", "category": "material" },
{ "id": "23", "name": "POM", "code": "pom", "category": "material" },
{ "id": "24", "name": "Nylon", "code": "nylon", "category": "material" },
{ "id": "25", "name": "UHMWPE", "code": "uhmwpe", "category": "material" },
{ "id": "26", "name": "Polycarbonate", "code": "pc", "category": "material" },
{ "id": "27", "name": "PBT", "code": "pbt", "category": "material" },
{
"id": "28",
"name": "Very Low",
"code": "very_low",
"category": "sound_level"
},
{ "id": "29", "name": "Low", "code": "low", "category": "sound_level" },
{ "id": "30", "name": "Medium", "code": "medium", "category": "sound_level" },
{ "id": "31", "name": "High", "code": "high", "category": "sound_level" },
{
"id": "32",
"name": "Very High",
"code": "very_high",
"category": "sound_level"
},
{
"id": "33",
"name": "Clicky",
"code": "sound_clicky",
"category": "sound_type"
},
{
"id": "34",
"name": "Thocky",
"code": "sound_thocky",
"category": "sound_type"
},
{
"id": "35",
"name": "Quiet",
"code": "sound_quiet",
"category": "sound_type"
},
{
"id": "36",
"name": "Creamy",
"code": "sound_creamy",
"category": "sound_type"
},
{
"id": "37",
"name": "Clacky",
"code": "sound_clacky",
"category": "sound_type"
},
{
"id": "38",
"name": "Leaf Spring",
"code": "leaf_spring",
"category": "tactility_type"
},
{
"id": "39",
"name": "Coil Spring",
"code": "coil_spring",
"category": "tactility_type"
},
{
"id": "40",
"name": "Click Bar",
"code": "click_bar",
"category": "tactility_type"
},
{
"id": "41",
"name": "Sharp",
"code": "sharp",
"category": "tactility_feedback"
},
{
"id": "42",
"name": "Rounded",
"code": "rounded",
"category": "tactility_feedback"
},
{
"id": "43",
"name": "Crisp",
"code": "crisp",
"category": "tactility_feedback"
},
{
"id": "44",
"name": "Smooth",
"code": "smooth",
"category": "tactility_feedback"
},
{ "id": "45", "name": "Red", "code": "red", "category": "color" },
{ "id": "46", "name": "Black", "code": "black", "category": "color" },
{ "id": "47", "name": "Blue", "code": "blue", "category": "color" },
{ "id": "48", "name": "Brown", "code": "brown", "category": "color" },
{ "id": "49", "name": "Clear", "code": "clear", "category": "color" },
{ "id": "50", "name": "Yellow", "code": "yellow", "category": "color" },
{ "id": "51", "name": "White", "code": "white", "category": "color" },
{
"id": "52",
"name": "Transparent",
"code": "transparent",
"category": "color"
},
{ "id": "53", "name": "Smokey", "code": "smokey", "category": "color" },
{ "id": "54", "name": "Green", "code": "green", "category": "color" },
{ "id": "55", "name": "Purple", "code": "purple", "category": "color" },
{ "id": "56", "name": "Orange", "code": "orange", "category": "color" },
{ "id": "57", "name": "Pink", "code": "pink", "category": "color" },
{ "id": "58", "name": "Gray", "code": "gray", "category": "color" },
{ "id": "59", "name": "Silver", "code": "silver", "category": "color" },
{ "id": "60", "name": "Gold", "code": "gold", "category": "color" },
{ "id": "61", "name": "Turquoise", "code": "turquoise", "category": "color" },
{ "id": "62", "name": "Teal", "code": "teal", "category": "color" },
{ "id": "63", "name": "Lavender", "code": "lavender", "category": "color" },
{ "id": "64", "name": "Magenta", "code": "magenta", "category": "color" },
{ "id": "65", "name": "Cyan", "code": "cyan", "category": "color" },
{ "id": "66", "name": "Ivory", "code": "ivory", "category": "color" },
{ "id": "67", "name": "Coral", "code": "coral", "category": "color" },
{ "id": "68", "name": "Maroon", "code": "maroon", "category": "color" },
{ "id": "69", "name": "Beige", "code": "beige", "category": "color" },
{ "id": "70", "name": "Mint", "code": "mint", "category": "color" },
{ "id": "71", "name": "Peach", "code": "peach", "category": "color" },
{ "id": "72", "name": "Tan", "code": "tan", "category": "color" },
{ "id": "73", "name": "Khaki", "code": "khaki", "category": "color" },
{
"id": "74",
"name": "3-Pin",
"code": "3_pin",
"category": "pin_configuration"
},
{
"id": "75",
"name": "5-Pin",
"code": "5_pin",
"category": "pin_configuration"
}
]
Producers Data
[
{ "id": "1", "name": "Cherry", "alias": "cherry" },
{ "id": "2", "name": "Gateron", "alias": "gateron" },
{ "id": "3", "name": "Kailh", "alias": "kailh" },
{ "id": "4", "name": "Outemu", "alias": "outemu" },
{ "id": "5", "name": "ZealPC", "alias": "zealpc" },
{ "id": "6", "name": "TTC", "alias": "ttc" },
{ "id": "7", "name": "Durock", "alias": "durock" },
{ "id": "8", "name": "Akko", "alias": "akko" },
{ "id": "9", "name": "NovelKeys", "alias": "novelkeys" },
{ "id": "10", "name": "Drop", "alias": "drop" },
{ "id": "11", "name": "Glorious", "alias": "glorious" },
{ "id": "12", "name": "Keychron", "alias": "keychron" },
{ "id": "13", "name": "Epomaker", "alias": "epomaker" },
{ "id": "14", "name": "Razer", "alias": "razer" },
{ "id": "15", "name": "Logitech", "alias": "logitech" },
{ "id": "16", "name": "SteelSeries", "alias": "steelseries" },
{ "id": "17", "name": "Kinetic Labs", "alias": "kentic_labs" },
{ "id": "18", "name": "Chosfox", "alias": "chosfox" },
{ "id": "19", "name": "Roccat", "alias": "roccat" },
{ "id": "20", "name": "Cooler Master", "alias": "cooler_master" },
{ "id": "21", "name": "Wuque Studio", "alias": "wuque_studio" },
{ "id": "22", "name": "JWK", "alias": "jwk" },
{ "id": "23", "name": "Tecsee", "alias": "tecsee" },
{ "id": "24", "name": "Everglide", "alias": "everglide" },
{ "id": "25", "name": "SP-Star", "alias": "sp_star" },
{ "id": "26", "name": "Gazzew", "alias": "gazzew" },
{ "id": "27", "name": "Keydous", "alias": "keydous" },
{ "id": "28", "name": "Cannon Keys", "alias": "cannon_keys" }
{ "id": "29", "name": "KBDFans", "alias": "kbd_fans" },
{ "id": "30", "name": "HMX", "alias": "hmx" },
{ "id": "31", "name": "Tbcats Studio", "alias": "tbcats" },
{ "id": "32", "name": "C³ EQUALZ X TKC", "alias": "c3xtkc" },
]