Ga naar hoofdinhoud

Clubs Schema

Database tabellen voor het club systeem.

Overzicht

Clubs zijn spelersgroepen met:

  • Gedeelde resources en projecten
  • Club territory met bouwgronden
  • Bonussen en upgrades
  • Lidmaatschap rangen
Club

├── ClubMember (leden)
│ └── Player

├── ClubResource (gedeelde resources)

├── ClubProject (bouwprojecten)
│ └── ClubContribution (bijdragen)

├── ClubBonus (actieve bonussen)

└── ClubMemberPlot (persoonlijke gronden)

Tabellen

club

Basis club informatie.

#[table(name = club, public)]
pub struct Club {
#[primary_key]
pub club_id: String, // "forest_friends"
pub name: String, // "De Bosvrienden"
pub description: String,
pub icon_path: String,
pub banner_path: String,
pub created_at: Timestamp,
pub created_by: Identity,
pub member_count: u32,
pub max_members: u32, // 10, 25, 50 (upgradeable)
pub level: u8, // Club level
pub xp: u64, // Club XP
pub is_public: bool, // Open voor iedereen?
pub join_requirement: String, // JSON: level, quest, etc.
pub territory_x: i32, // Club territory locatie
pub territory_y: i32,
pub territory_radius: i32,
}

club_member

Leden en hun rollen.

#[table(name = club_member, public)]
pub struct ClubMember {
#[primary_key]
#[auto_inc]
pub id: u64,
pub club_id: String,
pub player: Identity,
pub role: String, // "owner", "officer", "member"
pub joined_at: Timestamp,
pub contribution_points: u64, // Totale bijdrage
pub last_active: Timestamp,
}

Rollen:

RolRechten
ownerAlles + club verwijderen
officerLeden beheren, projecten starten
memberBijdragen aan projecten

club_resource

Gedeelde club resources.

#[table(name = club_resource, public)]
pub struct ClubResource {
#[primary_key]
#[auto_inc]
pub id: u64,
pub club_id: String,
pub resource_type: String, // "hout", "steen", "eikels"
pub amount: u64,
}

club_project

Collaboratieve bouwprojecten.

#[table(name = club_project, public)]
pub struct ClubProject {
#[primary_key]
#[auto_inc]
pub id: u64,
pub club_id: String,
pub project_type: String, // "upgrade_clubhouse", "build_farm"
pub display_name: String,
pub description: String,
pub required_resources: String, // JSON: {"hout": 1000, "steen": 500}
pub contributed_resources: String, // JSON: huidige bijdragen
pub progress_percent: u8,
pub started_at: Timestamp,
pub started_by: Identity,
pub completed: bool,
}

Project Types:

TypeBeschrijvingVereisten
upgrade_clubhouseClubhuis verbeteren500 hout, 300 steen
build_farmGedeelde boerderij200 hout, 100 potgrond
unlock_territoryGroter gebied1000 eikels
build_shopClub winkel400 hout, 200 steen

club_contribution

Audit log van bijdragen.

#[table(name = club_contribution, public)]
pub struct ClubContribution {
#[primary_key]
#[auto_inc]
pub id: u64,
pub project_id: u64,
pub player: Identity,
pub resource_type: String,
pub amount: u64,
pub contributed_at: Timestamp,
}

club_bonus

Actieve club bonussen.

#[table(name = club_bonus, public)]
pub struct ClubBonus {
#[primary_key]
#[auto_inc]
pub id: u64,
pub club_id: String,
pub bonus_type: String, // "farm_speed", "harvest_bonus"
pub bonus_value: f32, // 1.1 = 10% bonus
pub active: bool,
}

Bonus Types:

TypeEffect
farm_speedSnellere gewasgroei
harvest_bonusExtra oogst
xp_boostMeer XP
craft_speedSneller crafting

club_invite

Uitnodigingen voor spelers.

#[table(name = club_invite, public)]
pub struct ClubInvite {
#[primary_key]
#[auto_inc]
pub id: u64,
pub club_id: String,
pub invited_player: Identity,
pub invited_by: Identity,
pub invited_at: Timestamp,
pub expires_at: Timestamp,
}

club_member_plot

Persoonlijke bouwgronden binnen club territory.

#[table(name = club_member_plot, public)]
pub struct ClubMemberPlot {
#[primary_key]
#[auto_inc]
pub id: u64,
pub club_id: String,
pub member: Identity,
pub plot_x: i32,
pub plot_y: i32,
pub assigned_at: Timestamp,
}

Diagram

┌─────────────────┐
│ Club │
│─────────────────│
│ club_id (PK) │
│ name │
│ level │
│ territory_x/y │
└────────┬────────┘

┌────┴────────────┬──────────────┬───────────────┐
│ │ │ │
▼ ▼ ▼ ▼
┌─────────────┐ ┌───────────┐ ┌───────────┐ ┌─────────────┐
│ ClubMember │ │ClubResource│ │ClubProject│ │ ClubBonus │
│─────────────│ │───────────│ │───────────│ │─────────────│
│ player │ │ type │ │ type │ │ bonus_type │
│ role │ │ amount │ │ progress │ │ bonus_value │
└─────────────┘ └───────────┘ └─────┬─────┘ └─────────────┘


┌────────────────┐
│ClubContribution│
│────────────────│
│ player │
│ amount │
└────────────────┘

Queries

Club members laden

SELECT cm.*, p.username, p.display_name
FROM club_member cm
JOIN player p ON cm.player = p.identity
WHERE cm.club_id = :club_id
ORDER BY cm.role, cm.contribution_points DESC

Actieve projecten

SELECT * FROM club_project
WHERE club_id = :club_id AND completed = false

Volgende