fortytwo

package module
v0.2.0-alpha Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 1, 2023 License: MIT Imports: 14 Imported by: 0

README

go-fortytwo

GitHub tag (latest SemVer) Go Reference GitHub Go Report Card

go-fortytwo is a client for the 42 API, written in Go.

Installation

go get github.com/naofel1/go-fortytwo

Usage

To obtain an API key, follow 42 documentation getting started guide.

import "github.com/naofel1/go-fortytwo"

(...)

client := fortytwo.NewClient(ctx, "client_id", "client_secret", "redirect_url", []string{"public"})

achievements, err := client.List(context.Background(), &fortytwo.AchievementQueryRequest{
      Pagination: &fortytwo.Pagination{
         Cursor:   1,
         PageSize: 10,
      },
   })
if err != nil {
    // Handle error...
}

👉 Check out the docs on pkg.go.dev for a complete reference and the examples directory for more example code.

Status

The FortyTwo API golang package is in alpha. If you want to contribute you are welcome to do so. Please read the contributing guidelines before you start.

License

MIT License

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func KindValidator

func KindValidator(ro Kind) error

KindValidator is a validator for the "Kind" field enum values. It is called by the builders before save.

Types

type Achievement

type Achievement struct {
	ID           int      `json:"id"`
	Name         string   `json:"name"`
	Description  string   `json:"description"`
	Tier         string   `json:"tier"`
	Kind         string   `json:"kind"`
	Visible      bool     `json:"visible"`
	Image        string   `json:"image"`
	NbrOfSuccess int      `json:"nbr_of_success,omitempty"`
	UsersURL     string   `json:"users_url,omitempty"`
	Achievements []string `json:"achievements,omitempty"`
	Campus       []string `json:"campus,omitempty"`

	Parent *Achievement `json:"parent,omitempty"`
	Title  *Title       `json:"title,omitempty"`
}

type AchievementID

type AchievementID int

func (AchievementID) String

func (pID AchievementID) String() string

type AchievementQueryRequest

type AchievementQueryRequest struct {
	Pagination *Pagination `json:"pagination,omitempty"`
}

type Achievements

type Achievements []Achievement

type Campus

type Campus struct {
	ID   CampusID `json:"id"`
	Name string   `json:"name"`
}

type CampusID

type CampusID int

func (CampusID) String

func (pID CampusID) String() string

type CampusSlice

type CampusSlice []*Campus

type Client

type Client struct {
	Scope []string

	ClientID     string
	ClientSecret string

	Achievement AchievementService
	CursusUser  CursusUserService
	Project     ProjectService
	Cursus      CursusService
	User        UserService
	// contains filtered or unexported fields
}

func NewClient

func NewClient(ctx context.Context, ClientID, ClientSecret, RedirectURL string, Scope []string, opts ...ClientOption) (*Client, error)
func (c *Client) GetLink(ctx context.Context, state string) string

func (*Client) GetToken

func (c *Client) GetToken(ctx context.Context, code string) (*oauth2.Token, error)

type ClientOption

type ClientOption func(*Client)

ClientOption to configure API client

func WithHTTPClient

func WithHTTPClient(client *http.Client) ClientOption

WithHTTPClient overrides the default http.Client

func WithRetry

func WithRetry(retries int) ClientOption

WithRetry overrides the default number of max retry attempts on 429 errors

func WithVersion

func WithVersion(version string) ClientOption

WithVersion overrides the Intra42 API version

type Cursor

type Cursor int

type Cursus

type Cursus struct {
	ID        int        `json:"id"`
	CreatedAt time.Time  `json:"created_at"`
	Name      string     `json:"name"`
	Slug      string     `json:"slug"`
	Kind      CursusKind `json:"kind"`
}

type CursusClient

type CursusClient struct {
	// contains filtered or unexported fields
}

type CursusID

type CursusID int

func (CursusID) String

func (pID CursusID) String() string

type CursusKind

type CursusKind string

CursusKind defines the type for application.

const (
	CursusKindTest               CursusKind = "test"
	CursusKindMain               CursusKind = "main"
	CursusKindMainDeprecated     CursusKind = "main_deprecated"
	CursusKindExternal           CursusKind = "external"
	CursusKindExternalDeprecated CursusKind = "external_deprecated"
	CursusKindPiscine            CursusKind = "piscine"
	CursusKindPiscineCommunity   CursusKind = "piscine_community"
	CursusKindPiscineDeprecated  CursusKind = "piscine_deprecated"
)

CursusKind values.

func (CursusKind) String

func (ro CursusKind) String() string

String returns the string value for CursusKind.

type CursusQueryRequest

type CursusQueryRequest struct {
	Pagination *Pagination `json:"pagination,omitempty"`
}

type CursusService

type CursusService interface {
	List(context.Context, *CursusQueryRequest) (*CursusSlice, *PaginationResponse, error)

	FindByID(context.Context, CursusID) (*Cursus, error)
	DeleteByID(context.Context, CursusID) (*Cursus, error)
}

type CursusSlice

type CursusSlice []*Cursus

type CursusUser

type CursusUser struct {
	ID           int        `json:"id"`
	BeginAt      time.Time  `json:"begin_at"`
	EndAt        *time.Time `json:"end_at,omitempty"`
	Grade        string     `json:"grade"`
	Level        float64    `json:"level"`
	Skills       []Skill    `json:"skills"`
	CursusId     int        `json:"cursus_id"`
	HasCoalition bool       `json:"has_coalition"`
	User         User       `json:"user"`
	Cursus       Cursus     `json:"cursus"`
}

type CursusUserClient

type CursusUserClient struct {
	// contains filtered or unexported fields
}

type CursusUserID

type CursusUserID int

func (CursusUserID) String

func (pID CursusUserID) String() string

type CursusUserQueryRequest

type CursusUserQueryRequest struct {
	Pagination *Pagination `json:"pagination,omitempty"`
}

type CursusUserService

type CursusUserService interface {
	List(context.Context, *CursusUserQueryRequest) (*CursusUsers, *PaginationResponse, error)

	FindByID(context.Context, UserID) (*CursusUsers, error)
	FindByCursus(context.Context, CursusID) (*CursusUsers, error)
}

type CursusUsers

type CursusUsers []*CursusUser

type Error

type Error struct {
	Message string    `json:"message"`
	Code    ErrorCode `json:"code"`
	Status  int       `json:"status"`
}

func (*Error) Error

func (e *Error) Error() string

type ErrorCode

type ErrorCode string

type Image

type Image struct {
	Link     string        `json:"link"`
	Versions *ImageVersion `json:"versions"`
}

type ImageVersion

type ImageVersion struct {
	Large  string `json:"large"`
	Medium string `json:"medium"`
	Small  string `json:"small"`
	Micro  string `json:"micro"`
}

type Kind

type Kind string

Kind defines the type for the "kind" enum field.

const (
	KindSocial   Kind = "social"
	KindPedagogy Kind = "pedagogy"
)

Kind values.

func (Kind) String

func (ro Kind) String() string

type LanguageUser

type LanguageUser struct {
	ID         int       `json:"id"`
	LanguageID int       `json:"language_id"`
	UserID     int       `json:"user_id"`
	Position   int       `json:"position"`
	CreatedAt  time.Time `json:"created_at"`
}

type LanguageUserID

type LanguageUserID int

type LanguageUsers

type LanguageUsers []*LanguageUser

type LocationsStat

type LocationsStat interface{}

type Pagination

type Pagination struct {
	Cursor   int
	PageSize int
}

func (*Pagination) ToQuery

func (p *Pagination) ToQuery() map[string]string

type PaginationResponse

type PaginationResponse struct {
	Offset           int  `json:"-"`
	NumPages         int  `json:"pages"`
	NumItems         int  `json:"total"`
	ItemsPerPage     int  `json:"items"`
	CurrentPage      int  `json:"current"`
	NextPage         int  `json:"next,omitempty"`
	PrevPage         int  `json:"prev,omitempty"`
	HasPrev, HasNext bool `json:"-"`
}

func GetPaginationInfo

func GetPaginationInfo(h http.Header) *PaginationResponse

GetPaginationInfo retrieves the pagination information from the response header.

func (*PaginationResponse) Calculate

func (p *PaginationResponse) Calculate(numItems int)

pages start at 1 - not 0

type Project

type Project struct {
	ID          int           `json:"id"`
	Name        string        `json:"name"`
	Slug        string        `json:"slug"`
	Difficulty  int           `json:"difficulty"`
	Description string        `json:"description"`
	Parent      interface{}   `json:"parent"`
	Children    []interface{} `json:"children"`
	Objectives  []string      `json:"objectives"`
	Attachments []interface{} `json:"attachments"`
	CreatedAt   string        `json:"created_at"`
	UpdatedAt   string        `json:"updated_at"`
	Exam        bool          `json:"exam"`
}

type ProjectClient

type ProjectClient struct {
	// contains filtered or unexported fields
}

type ProjectID

type ProjectID int

func (ProjectID) String

func (pID ProjectID) String() string

type ProjectQueryRequest

type ProjectQueryRequest struct {
	Pagination *Pagination `json:"pagination,omitempty"`
}

type ProjectService

type ProjectService interface {
	List(context.Context, *ProjectQueryRequest) (*Projects, *PaginationResponse, error)

	GetProjectsByCursus(context.Context, CursusID) (*Projects, *PaginationResponse, error)

	FindByID(context.Context, ProjectID) (*Project, error)
	DeleteByID(context.Context, ProjectID) (*Project, error)
}

type Projects

type Projects []*Project

type RateLimitedError

type RateLimitedError struct {
	Message string
}

func (*RateLimitedError) Error

func (e *RateLimitedError) Error() string

type Skill

type Skill struct {
	ID        int       `json:"id"`
	CreatedAt time.Time `json:"created_at"`
	Name      string    `json:"name"`
	Slug      string    `json:"slug"`
}

type SkillID

type SkillID int

type SkillQueryRequest

type SkillQueryRequest struct {
	Pagination *Pagination `json:"pagination,omitempty"`
}

type Skills

type Skills []*Skill

type Title

type Title struct {
	ID   TitleID `json:"id"`
	Name string  `json:"name"`
}

type TitleID

type TitleID int

func (TitleID) String

func (pID TitleID) String() string

type Titles

type Titles []*Title

type Token

type Token string

func (Token) String

func (it Token) String() string

type User

type User struct {
	CreatedAt       time.Time      `json:"created_at"`
	UpdatedAt       time.Time      `json:"updated_at"`
	ID              int            `json:"id"`
	Email           string         `json:"email"`
	Login           string         `json:"login"`
	FirstName       string         `json:"first_name"`
	LastName        string         `json:"last_name"`
	UsualFullName   string         `json:"usual_full_name"`
	UsualFirstName  string         `json:"usual_first_name"`
	Url             string         `json:"url"`
	Phone           string         `json:"phone"`
	Displayname     string         `json:"displayname"`
	Kind            string         `json:"kind"`
	Image           Image          `json:"image"`
	Staff           bool           `json:"staff?"`
	CorrectionPoint int            `json:"correction_point"`
	PoolMonth       string         `json:"pool_month"`
	PoolYear        string         `json:"pool_year"`
	Location        interface{}    `json:"location"`
	Wallet          int            `json:"wallet"`
	AnonymizeDate   time.Time      `json:"anonymize_date"`
	DataErasureDate time.Time      `json:"data_erasure_date,omitempty"`
	AlumnizedAt     time.Time      `json:"alumnized_at,omitempty"`
	Alumni          bool           `json:"alumni?"`
	Active          bool           `json:"active?"`
	Groups          []interface{}  `json:"groups"`
	CursusUsers     []CursusUser   `json:"cursus_users"`
	ProjectsUsers   []interface{}  `json:"projects_users"`
	LanguagesUsers  []LanguageUser `json:"languages_users"`
}

type UserClient

type UserClient struct {
	// contains filtered or unexported fields
}

type UserID

type UserID int

func (UserID) String

func (pID UserID) String() string

type UserService

type UserService interface {
	Me(ctx context.Context, token string) (*User, error)

	List(ctx context.Context, req *CursusQueryRequest) (*Users, *PaginationResponse, error)

	FindByID(ctx context.Context, id UserID) (*User, error)
	FindByCampus(ctx context.Context, id CursusID) (*Users, error)

	LocationStats(ctx context.Context, id UserID) (*LocationsStat, error)
}

type Users

type Users []User

Directories

Path Synopsis
examples

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL