sdk-generator icon indicating copy to clipboard operation
sdk-generator copied to clipboard

🚀 Feature: Constants for Error Types

Open stnguyen90 opened this issue 2 years ago • 14 comments

🔖 Feature description

For the error types exposed here we should have a class with constants or an enum so we don't have to manually put the string in the code.

🎤 Pitch

Let say I want to display some error message specifically to the user depending on the type, so instead of doing this:

AppWriteException exception;
if (exception.type == 'user_already_exists') {
...
}

I could use the constant instead

AppWriteException exception;

if (exception.type == ErrorType.userAlreadyExists) {
...
}

Requirements

To implement this, we'll need to update the API specs to include the error types. For the API specs, we'll want to add an AppwriteException schema/definition like so:

    "definitions": {
        "appwriteException": {
            "properties": {
                "message": {
                    "type": "string",
                    "description": "Error message.",
                    "x-example": "Invalid id: Parameter must be a valid number"
                },
                "type": {
                    "type": "string",
                    "description": "Error type.",
                    "enum": [
                        "general_mock",
                        "general_argument_invalid"
                    ],
                    "x-example": "argument_invalid"
                },
                "code": {
                    "type": "integer",
                    "description": "Error code.",
                    "x-example": 400,
                    "format": "int32"
                }
            },
            "x-appwrite": {
                "types": [
                    {
                        "code": 400,
                        "type": "general_mock",
                        "description": "General errors thrown by the mock controller used for testing."
                    },
                    {
                        "code": 400,
                        "type": "general_argument_invalid",
                        "description": "The request contains one or more invalid arguments. Please refer to the endpoint documentation."
                    }
                ]
            }
        },
        "any": {
            "description": "Any",
            "type": "object",
            "additionalProperties": true
        },

Note:

  1. this is an example for Swagger 2. The equivalent will need to be done for OpenAPI 3
  2. we're still finalizing whether was want the types in definitions.appwriteException or definitions.appwriteException.properties.types

The SDK Generator should use the API specs to generate the enums with descriptions like:

enum ErrorType {
   /**
    * General errors thrown by the mock controller used for testing.
    */
    GeneralMock = "general_mock",

    /**
     * The request contains one or more invalid arguments. Please refer to the endpoint documentation.
     */
   GeneralArgumentInvalid = "general_argument_invalid"
}
enum ErrorType implements Comparable<ErrorType> {
  /// General errors thrown by the mock controller used for testing.
  generalMock(code: 400, type: 'general_mock'),
  /// General errors thrown by the mock controller used for testing.
  generalArgumentInvalid(code: 400, type: 'general_argument_invalid');

  const ErrorType({
    required this.code,
    required this.type,
  });

  final int code;
  final String type;

  @override
  int compareTo(ErrorType other) => type.compareTo(other.type);
}

So that the developer's IDE will show the description like:

image

Tasks

  • [ ] https://github.com/appwrite/appwrite/pull/5979
  • [ ] android
  • [x] cli - not needed
  • [ ] dart
  • [ ] deno
  • [ ] dotnet
  • [ ] https://github.com/appwrite/sdk-for-flutter/issues/149
  • [x] go - not ready
  • [x] graphql/docs - not needed
  • [ ] kotlin
  • [ ] node
  • [ ] php
  • [ ] python
  • [x] rest/docs - not needed
  • [ ] ruby
  • [ ] swift
  • [ ] web

👀 Have you spent some time to check if this issue has been raised before?

  • [X] I checked and didn't find similar issue

🏢 Have you read the Code of Conduct?

stnguyen90 avatar Aug 08 '23 00:08 stnguyen90

Hey @stnguyen90, I and @goswamianshuman are working on this, could you please assign it to us?

sahilsaha7773 avatar Aug 10 '23 05:08 sahilsaha7773

Hey @stnguyen90, we are here now you can assign this PR to us.😄

goswamianshuman avatar Aug 10 '23 05:08 goswamianshuman

@Haimantika I would like to work on this Issue.

35C4n0r avatar Oct 03 '23 05:10 35C4n0r

@Haimantika I would like to work on this Issue.

Hi @35C4n0r have assigned the issue to you! Thank you for showing interest in contributing to Appwrite! Happy Hacktoberfest 🎃

Notes:

Please update us with your progress every 3 days, so that we know that you are working on it. Join us on Discord - https://appwrite.io/discord to chat about Hacktoberfest and Appwrite!

Haimantika avatar Oct 03 '23 08:10 Haimantika

I would like to work on this issue

monhelnog avatar Oct 03 '23 15:10 monhelnog

I would like to work on this issue

Hi, we are assigning issues on a first-come, first-serve basis, if @35C4n0r decides to drop off, we will assign it to you.

Haimantika avatar Oct 03 '23 15:10 Haimantika

Hey @Haimantika, i would like to work on this issue.

heyhimansh avatar Oct 04 '23 05:10 heyhimansh

Hey @Haimantika, i would like to work on this issue.

Hi, we are assigning issues on a first-come, first-serve basis, if @35C4n0r decides to drop off, we will assign it to you.

Haimantika avatar Oct 04 '23 20:10 Haimantika

Hi @35C4n0r is there an update? The issue will be assigned to the next person in line soon due to inactivity

Haimantika avatar Oct 06 '23 12:10 Haimantika

Hi @Haimantika working on this, i've managed to understand the codebase, am still working on this issue.

35C4n0r avatar Oct 06 '23 19:10 35C4n0r

@stnguyen90 @Haimantika the URL for the Swagger API Spec is invalid https://github.com/appwrite/sdk-generator/blob/2069238e3a3b96ebf6359e8eca8caf4e37a1868c/README.md?plain=1#L50 Can you please inform me about the correct URL. For now i'm using \tests\resources\spec.json

35C4n0r avatar Oct 07 '23 10:10 35C4n0r

@stnguyen90 should we put the enum in exceptions.*.twig or create a new file for it. Also for the spec you provided this is the only part we should make an enum out of right?

"x-appwrite": {
                "types": [
                    {
                        "code": 400,
                        "type": "general_mock",
                        "description": "General errors thrown by the mock controller used for testing."
                    },
                    {
                        "code": 400,
                        "type": "general_argument_invalid",
                        "description": "The request contains one or more invalid arguments. Please refer to the endpoint documentation."
                    }
                ]
            }
        }

35C4n0r avatar Oct 07 '23 14:10 35C4n0r

@35C4n0r,

the URL for the Swagger API Spec is invalid

The specs are here.

should we put the enum in exceptions.*.twig or create a new file for it.

In the exception file is fine.

Also for the spec you provided this is the only part we should make an enum out of right?

FYI, we already have https://github.com/appwrite/appwrite/pull/5979 open for the specs part, although we haven't finalized where in the specs the types should go.

stnguyen90 avatar Oct 09 '23 20:10 stnguyen90

Commenting to get notified of any updates to this!

ItzNotABug avatar Mar 01 '24 04:03 ItzNotABug