l-ai-stalker-proto/stalker.proto

228 lines
5.4 KiB
Protocol Buffer

syntax = "proto3";
package stalker;
option go_package = "stalker-service/proto/stalker";
import "google/protobuf/timestamp.proto";
import "google/protobuf/empty.proto";
// StalkerService provides FaceIT match tracking and player management
service StalkerService {
// Player management
rpc SearchPlayer(SearchPlayerRequest) returns (Player);
rpc GetPlayerByID(GetPlayerByIDRequest) returns (Player);
// Match management
rpc GetPlayerMatches(GetPlayerMatchesRequest) returns (GetPlayerMatchesResponse);
rpc GetMatchDetails(GetMatchDetailsRequest) returns (MatchDetails);
// Database operations
rpc SaveMatches(SaveMatchesRequest) returns (google.protobuf.Empty);
rpc GetUserMatches(GetUserMatchesRequest) returns (GetUserMatchesResponse);
rpc GetUserMatchStats(GetUserMatchStatsRequest) returns (UserMatchStats);
rpc GetMatchesSince(GetMatchesSinceRequest) returns (GetUserMatchesResponse);
rpc GetMatchesLastNDays(GetMatchesLastNDaysRequest) returns (GetUserMatchesResponse);
// Account linking
rpc LinkFaceITAccount(LinkFaceITAccountRequest) returns (LinkedAccount);
rpc GetLinkedFaceITAccount(GetLinkedFaceITAccountRequest) returns (LinkedAccount);
rpc LinkSteamAccount(LinkSteamAccountRequest) returns (LinkedAccount);
rpc GetLinkedSteamAccount(GetLinkedSteamAccountRequest) returns (LinkedAccount);
}
// Player represents a FaceIT player
message Player {
string player_id = 1;
string nickname = 2;
string avatar = 3;
string country = 4;
string faceit_url = 5;
}
// MatchStats represents individual player statistics in a match
message MatchStats {
int32 kills = 1;
int32 deaths = 2;
int32 assists = 3;
int32 skill_level = 4;
int32 elo = 5;
int32 headshots = 6;
int32 headshots_pct = 7;
}
// TeamPlayer represents a player in a team
message TeamPlayer {
string player_id = 1;
string nickname = 2;
string avatar = 3;
int32 skill_level = 4;
string game_player_id = 5;
string game_player_name = 6;
string faceit_url = 7;
MatchStats stats = 8;
}
// Team represents a team in a match
message Team {
string team_id = 1;
string nickname = 2;
string avatar = 3;
string type = 4;
repeated TeamPlayer players = 5;
}
// MatchResult represents a single match result
message MatchResult {
string match_id = 1;
string game_id = 2;
string region = 3;
string match_type = 4;
string game_mode = 5;
int32 max_players = 6;
int32 teams_size = 7;
map<string, Team> teams = 8;
repeated string playing_players = 9;
string competition_id = 10;
string competition_name = 11;
string competition_type = 12;
string organizer_id = 13;
string status = 14;
int64 started_at = 15;
int64 finished_at = 16;
MatchResults results = 17;
string faceit_url = 18;
// Player-specific data
MatchStats player_stats = 19;
string player_faction = 20;
}
// MatchResults represents match results
message MatchResults {
string winner = 1;
map<string, int32> score = 2;
}
// MatchDetails represents detailed match information
message MatchDetails {
string match_id = 1;
string game_id = 2;
map<string, Team> teams = 3;
repeated string playing_players = 4;
MatchResults results = 5;
string status = 6;
int64 started_at = 7;
int64 finished_at = 8;
}
// FaceITMatch represents a match stored in the database
message FaceITMatch {
int64 id = 1;
int64 global_user_id = 2;
string faceit_player_id = 3;
string match_id = 4;
string game = 5;
string status = 6;
string result = 7;
int32 skill_level = 8;
google.protobuf.Timestamp match_start_time = 9;
google.protobuf.Timestamp match_end_time = 10;
google.protobuf.Timestamp synced_at = 11;
google.protobuf.Timestamp updated_at = 12;
}
// LinkedAccount represents a linked FaceIT account
message LinkedAccount {
int64 id = 1;
int64 global_user_id = 2;
string platform = 3;
string account_id = 4;
string account_username = 5;
string account_url = 6;
google.protobuf.Timestamp linked_at = 7;
google.protobuf.Timestamp updated_at = 8;
}
// UserMatchStats represents aggregated user statistics
message UserMatchStats {
int32 total_matches = 1;
int32 wins = 2;
int32 losses = 3;
float avg_kills = 4;
float avg_deaths = 5;
float avg_assists = 6;
float win_rate = 7;
}
// Request/Response messages
message SearchPlayerRequest {
string nickname = 1;
}
message GetPlayerByIDRequest {
string player_id = 1;
}
message GetPlayerMatchesRequest {
string player_id = 1;
int32 limit = 2;
}
message GetPlayerMatchesResponse {
repeated MatchResult matches = 1;
}
message GetMatchDetailsRequest {
string match_id = 1;
}
message SaveMatchesRequest {
repeated FaceITMatch matches = 1;
}
message GetUserMatchesRequest {
int64 global_user_id = 1;
int32 limit = 2;
}
message GetUserMatchesResponse {
repeated FaceITMatch matches = 1;
}
message GetUserMatchStatsRequest {
int64 global_user_id = 1;
}
message GetMatchesSinceRequest {
int64 global_user_id = 1;
google.protobuf.Timestamp since = 2;
}
message GetMatchesLastNDaysRequest {
int64 global_user_id = 1;
int32 days = 2;
}
message LinkFaceITAccountRequest {
int64 global_user_id = 1;
string account_id = 2;
string account_username = 3;
string account_url = 4;
}
message GetLinkedFaceITAccountRequest {
int64 global_user_id = 1;
}
message LinkSteamAccountRequest {
int64 global_user_id = 1;
string steam_id = 2;
string username = 3;
string profile_url = 4;
}
message GetLinkedSteamAccountRequest {
int64 global_user_id = 1;
}