Skip to content

🚀 Feature: Constants for Error Types #698

Description

@stnguyen90

🔖 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

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

  • I checked and didn't find similar issue

🏢 Have you read the Code of Conduct?

Metadata

Metadata

Labels

hacktoberfestIssues that can win you some cool merchandise!

Type

No type

Fields

No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions