소스 검색

Team management in CLI.

Iñigo Valentin 4 년 전
부모
커밋
7511051c7b
5개의 변경된 파일467개의 추가작업 그리고 30개의 파일을 삭제
  1. 2 16
      src/RuneOptimizer/RuneOptimizer.c
  2. 7 0
      src/RuneOptimizer/error/error.h
  3. 11 2
      src/RuneOptimizer/help/help.c
  4. 409 11
      src/RuneOptimizer/team/team.c
  5. 38 1
      src/RuneOptimizer/team/team.h

+ 2 - 16
src/RuneOptimizer/RuneOptimizer.c

@@ -87,22 +87,8 @@ int main(int argc, char *argv[]){
 
     // Help command.
     else if (strcmp(argv[1], "team") == 0){
-        if (argc < 3){
-            fprintf(stderr, "Command team needs an action\n");
-            return ERROR_INPUT_TEAM_NO_ACTION;
-        }
-        if (strcmp(argv[2], "list") == 0){
-            int result = list_teams(argc, argv);
-            return result;
-        }
-        else if (strcmp(argv[2], "create") == 0){
-            int result = create_team(argc, argv);
-            return result;
-        }
-        else{
-            fprintf(stderr, "Invalid action for team command: %s\n", argv[1]);
-            return ERROR_INPUT_TEAM_INVALID_ACTION;
-        }
+        // Pass the rest of the arguments to the team function, handle it there.
+        return team(argc - 2, argv + 2);
     }
 
     // Update command

+ 7 - 0
src/RuneOptimizer/error/error.h

@@ -43,6 +43,10 @@
 #define ERROR_INPUT_TEAM_CREATE_PRIORITY 123
 #define ERROR_INPUT_UPDATE_NO_ARGUMENTS 124
 #define ERROR_INPUT_UPDATE_UNKNOWN_SOURCE 125
+#define ERROR_INPUT_VERIFY_TEAM_UNIT_TEAM 126
+#define ERROR_INPUT_VERIFY_TEAM_UNIT_UNIT 127
+#define ERROR_INPUT_VERIFY_TEAM_UNIT_INCLUDED 128
+#define ERROR_INPUT_TEAM_DELETE_ARGUMENT_COUNT 129
 #define ERROR_DB_CANT_OPEN 200
 #define ERROR_DB_UNIT 201
 #define ERROR_DB_UNIT_NOF_FOUND 202
@@ -71,3 +75,6 @@
 #define ERROR_DB_DROP_INFO 213
 #define ERROR_DB_CREATE_INFO 214
 #define ERROR_DB_INSERT_INFO 215
+#define ERROR_DB_VERIFY_TEAM_UNIT 216
+#define ERROR_DB_DELETE_UNITS_TEAMS 217
+#define ERROR_DB_DELETE_TEAMS 217

+ 11 - 2
src/RuneOptimizer/help/help.c

@@ -43,13 +43,22 @@ void show_help(){
     printf("\n    Usage\n");
     printf("    RuneOptimizer team [action] [options]\n");
     printf("\n      Actions: \n\n");
-    printf("        list [team] <options>        List list of all or the selected team.\n");
-    printf("          [team] is optional and can can be a team ID or a team name (case sensitive).\n");
+    printf("        list [id] <options>        List list of all or the selected team.\n");
+    printf("          [id] is optional and can be a team ID.\n");
     printf("          Options: \n");
     printf("            -u | --units        Include the units in the details.\n");
     printf("\n        create [name] [priority]   Creates a new team.\n");
     printf("          [name] The new team name, mandatory.\n");
     printf("          [priority] Team priority (0-50). Optional, defaults to 0.\n");
+    printf("\n        delete [id]                Deletes a team and it's units.\n");
+    printf("          [id] The team ID, mandatory.\n");
+    printf("          WARNING! This can't be undone!\n");
+    printf("\n        add_unit [team] [unit]     Adds a unit to a team.\n");
+    printf("          [team] The team ID, mandatory.\n");
+    printf("          [unit] The unit ID, mandatory.\n");
+    printf("\n        remove_unit [team] [unit]  Removes a unit from a team.\n");
+    printf("          [team] The team ID, mandatory.\n");
+    printf("          [unit] The unit ID, mandatory.\n");
     printf("\n\n  Command: optimize\n");
     printf("\n    Calculates an optimization for a unit.\n");
     printf("\n    Usage\n");

+ 409 - 11
src/RuneOptimizer/team/team.c

@@ -15,6 +15,245 @@
  * RuneOptimizer. If not, see <https://www.gnu.org/licenses/>.
  */
 
+/**
+ * Parses the arguments passes to the team function and calls the appripiate
+ * function.
+ *
+ * @param argc[in] Argument count.
+ * @param argv[in] Argument list.
+ * @return SUCCESS or an error code.
+ */
+int team(int argc, char *argv[]){
+    if (argc < 1){
+        fprintf(stderr, "Command team needs an action\n");
+        return ERROR_INPUT_TEAM_NO_ACTION;
+    }
+    if (strcmp(argv[0], "list") == 0){
+        return list_team(argc - 1, argv + 1);
+    }
+    else if (strcmp(argv[0], "create") == 0){
+        return create_team(argc - 1, argv + 1);
+    }
+    else if (strcmp(argv[0], "delete") == 0){
+        return delete_team(argc - 1, argv + 1);
+    }
+    else if (strcmp(argv[0], "add_unit") == 0){
+        return add_team_unit(argc - 1, argv + 1);
+    }
+    else if (strcmp(argv[0], "remove_unit") == 0){
+        return remove_team_unit(argc - 1, argv + 1);
+    }
+    else{
+        fprintf(stderr, "Invalid action for team command: %s\n", argv[0]);
+        return ERROR_INPUT_TEAM_INVALID_ACTION;
+    }
+}
+
+/**
+ * Removes a unit from a team.
+ *
+ * @param argc[in] Argument count.
+ * @param argv[in] Argument list.
+ * @return SUCCESS or an error code.
+ */
+int remove_team_unit(int argc, char *argv[]){
+    if (argc != 2){
+        fprintf(
+          stderr, "remove_unit needs exactly two argument, %d supplied\n",
+          argc
+        );
+        return ERROR_INPUT_TEAM_NO_ACTION;
+    }
+    sqlite3 *db;
+    if (
+      SUCCESS != sqlite3_open_v2(db_location, &db, SQLITE_OPEN_READWRITE, NULL)
+    ){
+        fprintf(stderr, "Cannot open database: %s\n", sqlite3_errmsg(db));
+        sqlite3_close(db);
+        return ERROR_DB_CANT_OPEN;
+    }
+    char query[200] =
+      "SELECT count(unit) AS inc FROM units_teams WHERE team = ? AND unit = ?";
+
+    sqlite3_stmt *stmt_verify;
+    if (SQLITE_OK != sqlite3_prepare_v2(db, query, -1, &stmt_verify, 0)) {
+        fprintf(
+          stderr, "Error verifiying units and teams: %s\n", sqlite3_errmsg(db)
+        );
+        return ERROR_DB_RUNES_SLOT;
+    }
+    sqlite3_bind_text(stmt_verify, 1, argv[0], strlen(argv[0]), NULL);
+    sqlite3_bind_text(stmt_verify, 2, argv[1], strlen(argv[1]), NULL);
+    if (SQLITE_ROW != sqlite3_step(stmt_verify)){
+        fprintf(
+          stderr, "Unable to verify unit and team: %s\n", sqlite3_errmsg(db)
+        );
+        sqlite3_finalize(stmt_verify);
+        sqlite3_close(db);
+        return ERROR_DB_VERIFY_TEAM_UNIT;
+    }
+    if (sqlite3_column_int(stmt_verify, 0) == 0){
+        fprintf(
+          stderr,
+          "There is no unit with ID '%s' in team with ID '%s'\n",
+          argv[1],
+          argv[0]
+        );
+        sqlite3_finalize(stmt_verify);
+        sqlite3_close(db);
+        return ERROR_INPUT_VERIFY_TEAM_UNIT_TEAM;
+    }
+    sqlite3_finalize(stmt_verify);
+
+    // Delete from units_teams
+    sqlite3_stmt *stmt_insert;
+    strcpy(query, "DELETE FROM units_teams WHERE team = ? AND unit = ?");
+    if (SQLITE_OK != sqlite3_prepare_v2(db, query, -1, &stmt_insert, 0)) {
+        fprintf(
+          stderr,
+          "Failed to prepare statement to delete from units_teams: %s\n",
+          sqlite3_errmsg(db)
+        );
+        sqlite3_finalize(stmt_insert);
+        sqlite3_close(db);
+        return ERROR_DB_DELETE_UNITS_TEAMS;
+    }
+    sqlite3_bind_text(stmt_verify, 1, argv[0], strlen(argv[0]), NULL);
+    sqlite3_bind_text(stmt_verify, 2, argv[1], strlen(argv[1]), NULL);
+    if (SQLITE_DONE != sqlite3_step(stmt_insert)){
+        fprintf(
+          stderr,
+          "Unable to to insert into units_teams: %s\n", sqlite3_errmsg(db)
+        );
+        sqlite3_finalize(stmt_insert);
+        sqlite3_close(db);
+        return ERROR_DB_DELETE_UNITS_TEAMS;
+    }
+
+    // Inform about the newly created team
+    printf(
+      "Unit with ID '%s' succesfully removed from team with id '%s'\n",
+      argv[1], argv[0]
+    );
+    sqlite3_finalize(stmt_insert);
+    sqlite3_close(db);
+
+    // Show the team composition and end.
+    char *args_to_list[2] = {argv[0], "--units"};
+    list_team(2, args_to_list);
+    return SUCCESS;
+}
+
+/**
+ * Adds a unit to a team.
+ *
+ * @param argc[in] Argument count.
+ * @param argv[in] Argument list.
+ * @return SUCCESS or an error code.
+ */
+int add_team_unit(int argc, char *argv[]){
+    if (argc != 2){
+        fprintf(
+          stderr, "add_unit needs exactly two arguments, %d supplied\n",
+          argc
+        );
+        return ERROR_INPUT_TEAM_NO_ACTION;
+    }
+    sqlite3 *db;
+    if (
+      SUCCESS != sqlite3_open_v2(db_location, &db, SQLITE_OPEN_READWRITE, NULL)
+    ){
+        fprintf(stderr, "Cannot open database: %s\n", sqlite3_errmsg(db));
+        sqlite3_close(db);
+        return ERROR_DB_CANT_OPEN;
+    }
+    char query[200] =
+      "SELECT "
+      "(SELECT count(id) FROM teams WHERE id = ?) AS team, "
+      "(SELECT count(id) FROM units WHERE id = ?) AS unit, "
+      "(SELECT count(*) FROM units_teams WHERE team = ? AND unit = ?) AS inc";
+
+    sqlite3_stmt *stmt_verify;
+    if (SQLITE_OK != sqlite3_prepare_v2(db, query, -1, &stmt_verify, 0)) {
+        fprintf(
+          stderr, "Error verifiying units and teams: %s\n", sqlite3_errmsg(db)
+        );
+        return ERROR_DB_RUNES_SLOT;
+    }
+    sqlite3_bind_text(stmt_verify, 1, argv[0], strlen(argv[0]), NULL);
+    sqlite3_bind_text(stmt_verify, 2, argv[1], strlen(argv[1]), NULL);
+    sqlite3_bind_text(stmt_verify, 3, argv[0], strlen(argv[0]), NULL);
+    sqlite3_bind_text(stmt_verify, 4, argv[1], strlen(argv[1]), NULL);
+    if (SQLITE_ROW != sqlite3_step(stmt_verify)){
+        fprintf(
+          stderr, "Unable to verify unit and team: %s\n", sqlite3_errmsg(db)
+        );
+        sqlite3_finalize(stmt_verify);
+        sqlite3_close(db);
+        return ERROR_DB_VERIFY_TEAM_UNIT;
+    }
+    if (sqlite3_column_int(stmt_verify, 0) == 0){
+        fprintf(stderr, "Team with ID '%s' does not exists\n", argv[0]);
+        sqlite3_finalize(stmt_verify);
+        sqlite3_close(db);
+        return ERROR_INPUT_VERIFY_TEAM_UNIT_TEAM;
+    }
+    if (sqlite3_column_int(stmt_verify, 1) == 0){
+        fprintf(stderr, "Unit with ID '%s' does not exists\n", argv[1]);
+        sqlite3_finalize(stmt_verify);
+        sqlite3_close(db);
+        return ERROR_INPUT_VERIFY_TEAM_UNIT_UNIT;
+    }
+    if (sqlite3_column_int(stmt_verify, 2) != 0){
+        fprintf(
+          stderr,
+          "Unit with ID '%s' is already in team with ID %s\n", argv[1], argv[0]
+        );
+        sqlite3_finalize(stmt_verify);
+        sqlite3_close(db);
+        return ERROR_INPUT_VERIFY_TEAM_UNIT_INCLUDED;
+    }
+    sqlite3_finalize(stmt_verify);
+
+    // Insert into units_teams
+    sqlite3_stmt *stmt_insert;
+    strcpy(query, "INSERT INTO units_teams (team, unit) VALUES (?, ?)");
+    if (SQLITE_OK != sqlite3_prepare_v2(db, query, -1, &stmt_insert, 0)) {
+        fprintf(
+          stderr,
+          "Failed to prepare statement to insert into units_teams: %s\n",
+          sqlite3_errmsg(db)
+        );
+        sqlite3_finalize(stmt_insert);
+        sqlite3_close(db);
+        return ERROR_DB_INSERT_UNITS_TEAMS;
+    }
+    sqlite3_bind_text(stmt_verify, 1, argv[0], strlen(argv[0]), NULL);
+    sqlite3_bind_text(stmt_verify, 2, argv[1], strlen(argv[1]), NULL);
+    if (SQLITE_DONE != sqlite3_step(stmt_insert)){
+        fprintf(
+          stderr,
+          "Unable to to insert into units_teams: %s\n", sqlite3_errmsg(db)
+        );
+        sqlite3_finalize(stmt_insert);
+        sqlite3_close(db);
+        return ERROR_DB_INSERT_UNITS_TEAMS;
+    }
+
+    // Inform about the newly created team
+    printf(
+      "Unit with ID '%s' succesfully added to team with id '%s'\n",
+      argv[1], argv[0]
+    );
+    sqlite3_finalize(stmt_insert);
+    sqlite3_close(db);
+
+    // Show the team composition and end.
+    char *args_to_list[2] = {argv[0], "--units"};
+    list_team(2, args_to_list);
+    return SUCCESS;
+}
+
 /**
  * Displays teams.
  *
@@ -22,12 +261,21 @@
  * @param argv[in] Argument list.
  * @return SUCCESS or an error code.
  */
-int list_teams(int argc, char *argv[]){
+int list_team(int argc, char *argv[]){
+    // Get parameters
+    char show_units = FALSE;
+    int number_of_options = 0;
+    for (int i = 0; i < argc; i ++){
+        if (strcmp("--units", argv[i]) == 0 || strcmp("-u", argv[i]) == 0){
+            number_of_options ++;
+            show_units = TRUE;
+        }
+    }
     char id[8] = "\0";
     char query[300] = "SELECT id, name, priority FROM teams ";
     char tmp[64];
-    if (argc > 3){
-        strcpy(id, argv[3]);
+    if (argc > number_of_options){
+        strcpy(id, argv[0]);
         strcpy(tmp, "");
         sprintf(tmp, "WHERE id = '%s' OR name = '%s' ", id, id);
         strcat(query, tmp);
@@ -44,7 +292,7 @@ int list_teams(int argc, char *argv[]){
     sqlite3_stmt *stmt_teams;
     if (SQLITE_OK != sqlite3_prepare_v2(db, query, -1, &stmt_teams, 0)) {
         fprintf(stderr, "Error getting teams: %s\n", sqlite3_errmsg(db));
-        return ERROR_DB_RUNES_SLOT;
+        return ERROR_DB_TEAM_ID;
     }
 
     printf(" --------------------------------------------------\n");
@@ -60,12 +308,57 @@ int list_teams(int argc, char *argv[]){
               4, sqlite3_column_int(stmt_teams, 2)
             );
 
+            // If units are to be shown, query them here
+            if (show_units == TRUE){
+                strcpy(
+                  query,
+                  "SELECT id, name, level FROM units WHERE id IN "
+                  "  (SELECT DISTINCT unit FROM units_teams WHERE team = ?);"
+                );
+                sqlite3_stmt *stmt_units;
+                if (SQLITE_OK != sqlite3_prepare_v2(db, query, -1, &stmt_units, 0)) {
+                    fprintf(
+                    stderr,
+                    "Failed to execute statement to select new team ID: %s\n",
+                    sqlite3_errmsg(db)
+                    );
+                    sqlite3_finalize(stmt_units);
+                    sqlite3_close(db);
+                    return ERROR_DB_TEAM_ID;
+                }
+                sqlite3_bind_text(
+                  stmt_units, 1, sqlite3_column_text(stmt_teams, 0),
+                  strlen(sqlite3_column_text(stmt_teams, 0)), NULL
+                );
+                printf(" |      |----------------------------------|      |\n");
+                while (SQLITE_ROW == sqlite3_step(stmt_units)){
+                    strcpy(tmp, sqlite3_column_text(stmt_units, 1));
+                    if (strlen(tmp) > 9){
+                        tmp[10] = '\0';
+                    }
+                    sprintf(
+                      tmp,
+                      "%s (Lv.%d) (#%s) ",
+                      tmp,
+                      sqlite3_column_int(stmt_units, 2),
+                      sqlite3_column_text(stmt_units, 0)
+                    );
+                    printf(
+                      " |      | %*s |      |\n",
+                      32, tmp
+                    );
+                }
+                printf(" --------------------------------------------------\n");
+            }
         }
         else{
             break;
         }
     }
-    printf(" --------------------------------------------------\n");
+    if (show_units == FALSE){
+        // If units are shown, the last team has already closed the table.
+        printf(" --------------------------------------------------\n");
+    }
     sqlite3_finalize(stmt_teams);
     sqlite3_close(db);
     return SUCCESS;
@@ -80,20 +373,20 @@ int list_teams(int argc, char *argv[]){
  * @return SUCCESS or an error code.
  */
 int create_team(int argc, char *argv[]){
-    if (argc < 4 || argc > 5){
+    if (argc < 1 || argc > 2){
         fprintf(
           stderr,
-          "Team creation takes 1 or 2 arguments, %d supplied\n", argc - 3
+          "Team creation takes 1 or 2 arguments, %d supplied\n", argc
         );
         return ERROR_INPUT_TEAM_CREATE_ARGUMENT_COUNT;
     }
     int priority = 0;
 
     // If priority has been supplied as argument, validate it
-    if (argc == 5){
-        priority = atoi(argv[4]);
+    if (argc == 2){
+        priority = atoi(argv[1]);
         if(
-          strspn(argv[4], "0123456789") != strlen(argv[4]) ||
+          strspn(argv[1], "0123456789") != strlen(argv[1]) ||
           priority < 0 ||
           priority > 50
         ){
@@ -104,7 +397,7 @@ int create_team(int argc, char *argv[]){
 
     // Read name
     char name[128];
-    strcpy(name, argv[3]);
+    strcpy(name, argv[0]);
 
     int new_id = -1;
 
@@ -166,3 +459,108 @@ int create_team(int argc, char *argv[]){
     sqlite3_close(db);
     return SUCCESS;
 }
+
+/**
+ * Deletes a team.
+ *
+ * @param argc[in] Argument count.
+ * @param argv[in] Argument list.
+ * @return SUCCESS or an error code.
+ */
+int delete_team(int argc, char *argv[]){
+    if (argc != 1){
+        fprintf(
+          stderr,
+          "Team deletion takes exactly one argument, %d supplied\n", argc
+        );
+        return ERROR_INPUT_TEAM_DELETE_ARGUMENT_COUNT;
+    }
+
+    // Open database
+    sqlite3 *db;
+    if (
+      SUCCESS != sqlite3_open_v2(db_location, &db, SQLITE_OPEN_READWRITE, NULL)
+    ){
+        fprintf(stderr, "Cannot open database: %s\n", sqlite3_errmsg(db));
+        sqlite3_close(db);
+        return ERROR_DB_CANT_OPEN;
+    }
+    char query[200] = "SELECT count(id) AS c FROM teams WHERE id = ?";
+    sqlite3_stmt *stmt_verify;
+    if (SQLITE_OK != sqlite3_prepare_v2(db, query, -1, &stmt_verify, 0)) {
+        fprintf(
+          stderr, "Error verifiying team: %s\n", sqlite3_errmsg(db)
+        );
+        return ERROR_DB_TEAM_ID;
+    }
+    sqlite3_bind_text(stmt_verify, 1, argv[0], strlen(argv[0]), NULL);
+    if (SQLITE_ROW != sqlite3_step(stmt_verify)){
+        fprintf(
+          stderr, "Unable to verify team: %s\n", sqlite3_errmsg(db)
+        );
+        sqlite3_finalize(stmt_verify);
+        sqlite3_close(db);
+        return ERROR_DB_VERIFY_TEAM_UNIT;
+    }
+    if (sqlite3_column_int(stmt_verify, 0) == 0){
+        fprintf(stderr, "Team with ID '%s' does not exists\n", argv[0]);
+        sqlite3_finalize(stmt_verify);
+        sqlite3_close(db);
+        return ERROR_INPUT_VERIFY_TEAM_UNIT_TEAM;
+    }
+    sqlite3_finalize(stmt_verify);
+
+    // Delete from teams
+    sqlite3_stmt *stmt_delete;
+    strcpy(query, "DELETE FROM teams WHERE id = ?");
+    if (SQLITE_OK != sqlite3_prepare_v2(db, query, -1, &stmt_delete, 0)) {
+        fprintf(
+          stderr,
+          "Failed to prepare statement to delete from teams: %s\n",
+          sqlite3_errmsg(db)
+        );
+        sqlite3_finalize(stmt_delete);
+        sqlite3_close(db);
+        return ERROR_DB_DELETE_TEAMS;
+    }
+    sqlite3_bind_text(stmt_delete, 1, argv[0], strlen(argv[0]), NULL);
+    if (SQLITE_DONE != sqlite3_step(stmt_delete)){
+        fprintf(
+          stderr,
+          "Unable to to delete from units_teams: %s\n", sqlite3_errmsg(db)
+        );
+        sqlite3_finalize(stmt_delete);
+        sqlite3_close(db);
+        return ERROR_DB_DELETE_TEAMS;
+    }
+    sqlite3_finalize(stmt_delete);
+
+    // Delete from unit_teams
+    strcpy(query, "DELETE FROM units_teams WHERE team = ?");
+    if (SQLITE_OK != sqlite3_prepare_v2(db, query, -1, &stmt_delete, 0)) {
+        fprintf(
+          stderr,
+          "Failed to prepare statement to delete from units_teams: %s\n",
+          sqlite3_errmsg(db)
+        );
+        sqlite3_finalize(stmt_delete);
+        sqlite3_close(db);
+        return ERROR_DB_DELETE_TEAMS;
+    }
+    sqlite3_bind_text(stmt_delete, 1, argv[0], strlen(argv[0]), NULL);
+    if (SQLITE_DONE != sqlite3_step(stmt_delete)){
+        fprintf(
+          stderr,
+          "Unable to to delete from units_teams: %s\n", sqlite3_errmsg(db)
+        );
+        sqlite3_finalize(stmt_delete);
+        sqlite3_close(db);
+        return ERROR_DB_DELETE_TEAMS;
+    }
+
+    // Inform about the deleted team
+    printf("Team with ID '%s' deleted\n", argv[0]);
+    sqlite3_finalize(stmt_delete);
+    sqlite3_close(db);
+    return SUCCESS;
+}

+ 38 - 1
src/RuneOptimizer/team/team.h

@@ -15,6 +15,34 @@
  * RuneOptimizer. If not, see <https://www.gnu.org/licenses/>.
  */
 
+/**
+ * Parses the arguments passes to the team function and calls the appripiate
+ * function.
+ *
+ * @param argc[in] Argument count.
+ * @param argv[in] Argument list.
+ * @return SUCCESS or an error code.
+ */
+int team(int argc, char *argv[]);
+
+/**
+ * Removes a unit from a team.
+ *
+ * @param argc[in] Argument count.
+ * @param argv[in] Argument list.
+ * @return SUCCESS or an error code.
+ */
+int remove_team_unit(int argc, char *argv[]);
+
+/**
+ * Adds a unit to a team.
+ *
+ * @param argc[in] Argument count.
+ * @param argv[in] Argument list.
+ * @return SUCCESS or an error code.
+ */
+int add_team_unit(int argc, char *argv[]);
+
 /**
  * Displays teams.
  *
@@ -22,7 +50,7 @@
  * @param argv[in] Argument list.
  * @return SUCCESS or an error code.
  */
-int list_teams(int argc, char *argv[]);
+int list_team(int argc, char *argv[]);
 
 /**
  * Creates a team.
@@ -32,3 +60,12 @@ int list_teams(int argc, char *argv[]);
  * @return SUCCESS or an error code.
  */
 int create_team(int argc, char *argv[]);
+
+/**
+ * Deletes a team.
+ *
+ * @param argc[in] Argument count.
+ * @param argv[in] Argument list.
+ * @return SUCCESS or an error code.
+ */
+int delete_team(int argc, char *argv[]);