Skip to content

Commit

Permalink
Merge pull request #548 from PinguApps/346-create-database
Browse files Browse the repository at this point in the history
create database
  • Loading branch information
pingu2k4 authored Nov 28, 2024
2 parents 1ad0374 + e16a59f commit f045c77
Show file tree
Hide file tree
Showing 5 changed files with 103 additions and 11 deletions.
8 changes: 4 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -141,9 +141,9 @@ string emailAddressOrErrorMessage = userResponse.Result.Match(

## ⌛ Progress
<!-- `red` for first third, `gold` for second third, `forestgreen` for final third, `blue` for 100% -->
![Server & Client - 126 / 317](https://img.shields.io/badge/Server_&_Client-126%20%2F%20317-gold?style=for-the-badge)
![Server & Client - 127 / 317](https://img.shields.io/badge/Server_&_Client-127%20%2F%20317-gold?style=for-the-badge)

![Server - 66 / 224](https://img.shields.io/badge/Server-66%20%2F%20224-red?style=for-the-badge)
![Server - 67 / 224](https://img.shields.io/badge/Server-67%20%2F%20224-red?style=for-the-badge)

![Client - 60 / 93](https://img.shields.io/badge/Client-60%20%2F%2093-gold?style=for-the-badge)

Expand Down Expand Up @@ -275,12 +275,12 @@ string emailAddressOrErrorMessage = userResponse.Result.Match(
| [Update Preferences](https://appwrite.io/docs/references/1.6.x/client-rest/teams#updatePrefs) |||

### Databases
![Databases - 1 / 47](https://img.shields.io/badge/Databases-1%20%2F%2047-red?style=for-the-badge)
![Databases - 2 / 47](https://img.shields.io/badge/Databases-2%20%2F%2047-red?style=for-the-badge)

| Endpoint | Client | Server |
|:-:|:-:|:-:|
| [List Databases](https://appwrite.io/docs/references/1.6.x/server-rest/databases#list) |||
| [Create Databases](https://appwrite.io/docs/references/1.6.x/server-rest/databases#create) || |
| [Create Databases](https://appwrite.io/docs/references/1.6.x/server-rest/databases#create) || |
| [Get Database](https://appwrite.io/docs/references/1.6.x/server-rest/databases#get) |||
| [Update Database](https://appwrite.io/docs/references/1.6.x/server-rest/databases#update) |||
| [Delete Database](https://appwrite.io/docs/references/1.6.x/server-rest/databases#delete) |||
Expand Down
7 changes: 5 additions & 2 deletions src/PinguApps.Appwrite.Playground/App.cs
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,12 @@ public App(Client.IAppwriteClient client, Server.Clients.IAppwriteClient server,

public async Task Run(string[] args)
{
var request = new ListDatabasesRequest();
var request = new CreateDatabaseRequest()
{
Name = "My Database"
};

var response = await _server.Databases.ListDatabases(request);
var response = await _server.Databases.CreateDatabase(request);

Console.WriteLine(response.Result.Match(
result => result.ToString(),
Expand Down
17 changes: 15 additions & 2 deletions src/PinguApps.Appwrite.Server/Clients/DatabasesClient.cs
Original file line number Diff line number Diff line change
Expand Up @@ -38,9 +38,22 @@ public async Task<AppwriteResult<DatabasesList>> ListDatabases(ListDatabasesRequ
}
}

[ExcludeFromCodeCoverage]
/// <inheritdoc/>
public Task<AppwriteResult<Database>> CreateDatabase(CreateDatabaseRequest request) => throw new NotImplementedException();
public async Task<AppwriteResult<Database>> CreateDatabase(CreateDatabaseRequest request)
{
try
{
request.Validate(true);

var result = await _databasesApi.CreateDatabase(request);

return result.GetApiResponse();
}
catch (Exception e)
{
return e.GetExceptionResponse<Database>();
}
}

[ExcludeFromCodeCoverage]
/// <inheritdoc/>
Expand Down
11 changes: 8 additions & 3 deletions src/PinguApps.Appwrite.Server/Clients/IDatabasesClient.cs
Original file line number Diff line number Diff line change
Expand Up @@ -25,15 +25,20 @@ public interface IDatabasesClient
/// <returns>The databases list</returns>
Task<AppwriteResult<DatabasesList>> ListDatabases(ListDatabasesRequest request);

/// <summary>
/// Create a new Database.
/// <para><see href="https://appwrite.io/docs/references/cloud/server-rest/databases#create">Appwrite Docs</see></para>
/// </summary>
/// <param name="request">The request content</param>
/// <returns>The database</returns>
Task<AppwriteResult<Database>> CreateDatabase(CreateDatabaseRequest request);

[Obsolete("Endpoint not yet implemented.")]
Task<AppwriteResult<AttributeBoolean>> CreateBooleanAttribute(CreateBooleanAttributeRequest request);

[Obsolete("Endpoint not yet implemented.")]
Task<AppwriteResult<Collection>> CreateCollection(CreateCollectionRequest request);

[Obsolete("Endpoint not yet implemented.")]
Task<AppwriteResult<Database>> CreateDatabase(CreateDatabaseRequest request);

[Obsolete("Endpoint not yet implemented.")]
Task<AppwriteResult<AttributeDatetime>> CreateDatetimeAttribute(CreateDatetimeAttributeRequest request);

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
using System.Net;
using PinguApps.Appwrite.Shared.Requests.Databases;
using PinguApps.Appwrite.Shared.Tests;
using RichardSzalay.MockHttp;

namespace PinguApps.Appwrite.Server.Tests.Clients.Databases;
public partial class DatabasesClientTests
{
[Fact]
public async Task CreateDatabase_ShouldReturnSuccess_WhenApiCallSucceeds()
{
// Arrange
var request = new CreateDatabaseRequest
{
Name = "Pingu's Database"
};

_mockHttp.Expect(HttpMethod.Post, $"{TestConstants.Endpoint}/databases")
.ExpectedHeaders()
.Respond(TestConstants.AppJson, TestConstants.DatabaseResponse);

// Act
var result = await _appwriteClient.Databases.CreateDatabase(request);

// Assert
Assert.True(result.Success);
}

[Fact]
public async Task CreateDatabase_ShouldHandleException_WhenApiCallFails()
{
// Arrange
var request = new CreateDatabaseRequest
{
Name = "Pingu's Database"
};

_mockHttp.Expect(HttpMethod.Post, $"{TestConstants.Endpoint}/databases")
.ExpectedHeaders()
.Respond(HttpStatusCode.BadRequest, TestConstants.AppJson, TestConstants.AppwriteError);

// Act
var result = await _appwriteClient.Databases.CreateDatabase(request);

// Assert
Assert.True(result.IsError);
Assert.True(result.IsAppwriteError);
}

[Fact]
public async Task CreateDatabase_ShouldReturnErrorResponse_WhenExceptionOccurs()
{
// Arrange
var request = new CreateDatabaseRequest
{
Name = "Pingu's Database"
};

_mockHttp.Expect(HttpMethod.Post, $"{TestConstants.Endpoint}/databases")
.ExpectedHeaders()
.Throw(new HttpRequestException("An error occurred"));

// Act
var result = await _appwriteClient.Databases.CreateDatabase(request);

// Assert
Assert.False(result.Success);
Assert.True(result.IsInternalError);
Assert.Equal("An error occurred", result.Result.AsT2.Message);
}
}

0 comments on commit f045c77

Please sign in to comment.