clear and update

This commit is contained in:
Владимир Фёдоров 2024-02-19 03:10:41 +07:00
parent bcbd88d728
commit 8bae227154
4 changed files with 42 additions and 366 deletions

1
.gitignore vendored
View File

@ -22,3 +22,4 @@
go.work
/swaggers
/res

153
client.kt
View File

@ -1,153 +0,0 @@
package client
import io.micronaut.http.HttpResponse
import io.micronaut.http.annotation.*
import io.micronaut.http.client.annotation.Client
@Client(value = "INPUT URL")
interface GDSClient {
@Get(value = "/sales/dispatch/places")
fun getDispatchPlaces(
@Header authorization: String?,
): HttpResponse<List<PlaceAVS>>
@Post(value = "/sales/order/{orderId}/passenger")
fun addPassenger(
@Header authorization: String?,
@PathVariable orderId: Int,
): HttpResponse<TicketAVS>
@Put(value = "/sales/session/open")
fun openSession(
@Header authorization: String?,
): HttpResponse<SessionAVS>
@Get(value = "/sales/trip/{tripId}/document/types")
fun getDocumentTypes(
@Header authorization: String?,
@PathVariable tripId: Int,
): HttpResponse<List<DocTypeAVS>>
@Get(value = "/sales/arrival/places")
fun getArrivalPlaces(
@Header authorization: String?,
): HttpResponse<List<PlaceAVS>>
@Put(value = "/sales/order/tickets/{ticketId}/passenger")
fun updateTickerPassenger(
@Header authorization: String?,
@PathVariable ticketId: Int,
): HttpResponse<>
@Get(value = "/sales/order/{orderId}")
fun getOrder(
@Header authorization: String?,
@PathVariable orderId: Int,
): HttpResponse<OrderAVS>
@Delete(value = "/sales/order/{orderId}")
fun cancelOrder(
@Header authorization: String?,
@PathVariable orderId: Int,
): HttpResponse<OrderAVS>
@Post(value = "/sales/order/{orderId}/confirm/payment/by/{payForm}")
fun confirmPayment(
@Header authorization: String?,
@PathVariable orderId: Int,
@PathVariable payForm: String,
): HttpResponse<OrderAVS>
@Get(value = "/sales/ticket/series/{series}/number/{number}/return/calculation")
fun getReturnInfo(
@Header authorization: String?,
@PathVariable series: String,
@PathVariable number: String,
): HttpResponse<TicketAVS>
@Get(value = "/sales/trip/{tripId}/from/station/{dispatchStationId}/to/station/{arrivalStationId}/book/{ticketCount}")
fun bookOrder(
@Header authorization: String?,
@PathVariable tripId: String,
@PathVariable dispatchStationId: String,
@PathVariable arrivalStationId: String,
@PathVariable ticketCount: Int,
@PathVariable baggageCount: Int?,
): HttpResponse<OrderAVS>
@Get(value = "/settings")
fun getSettings(
): HttpResponse<Settings>
@Post(value = "/auth/token")
fun login(
): HttpResponse<AuthDTO>
@Get(value = "/kassa")
fun index(
): HttpResponse<>
@Get(value = "/sales/dispatch/place/{placeId}/stations")
fun getDispatchStations(
@Header authorization: String?,
@PathVariable placeId: Int,
): HttpResponse<List<StationAVS>>
@Post(value = "/sales/order/{orderId}/baggage")
fun addBaggage(
@Header authorization: String?,
@PathVariable orderId: Int,
): HttpResponse<TicketAVS>
@Put(value = "/sales/session/close")
fun closeSession(
@Header authorization: String?,
): HttpResponse<SessionAVS>
@Get(value = "/sales/trip/{tripId}/from/{dispatchStationId}/to/{arrivalStationId}/seats/free")
fun getSeatsFree(
@Header authorization: String?,
@PathVariable tripId: Int,
@PathVariable dispatchStationId: Int,
@PathVariable arrivalStationId: Int,
): HttpResponse<List<>>
@Get(value = "/sales/trip/{tripId}/ticket/types")
fun getTicketTypes(
@Header authorization: String?,
@PathVariable tripId: String,
): HttpResponse<List<TicketTypeAVS>>
@Get(value = "/countries")
fun getCountries(
): HttpResponse<List<CountryCode>>
@Get(value = "/sales/arrival/place/{placeId}/stations")
fun getArrivalStations(
@Header authorization: String?,
@PathVariable placeId: Int,
): HttpResponse<List<StationAVS>>
@Get(value = "/sales/dispatch/station/{dispatchStationId}/arrival/place/{arrivalPlaceId}/{date}/trips")
fun getTrips(
@Header authorization: String?,
@PathVariable dispatchStationId: Int,
@PathVariable arrivalPlaceId: Int,
@PathVariable date: String,
): HttpResponse<List<TripKassa>>
@Delete(value = "/sales/order/tickets/{ticketId}")
fun cancelTicket(
@Header authorization: String?,
@PathVariable ticketId: Int,
): HttpResponse<TicketAVS>
@Post(value = "/sales/ticket/{ticketId}/return")
fun returnTicket(
@Header authorization: String?,
@PathVariable ticketId: Int,
): HttpResponse<TicketAVS>
}

52
main.go
View File

@ -4,6 +4,7 @@ import (
"encoding/json"
"fmt"
"os"
"sort"
"strings"
)
@ -92,11 +93,11 @@ func main() {
res := toMicronautKotlin(config)
if err := os.WriteFile("models.kt", []byte(res["models"]), 0600); err != nil {
if err := os.WriteFile("res/models.kt", []byte(res["models"]), 0600); err != nil {
panic(err)
}
if err := os.WriteFile("client.kt", []byte(res["client"]), 0600); err != nil {
if err := os.WriteFile("res/client.kt", []byte(res["client"]), 0600); err != nil {
panic(err)
}
}
@ -122,11 +123,23 @@ func toMicronautKotlin(config *config) map[string]string {
sbClient.WriteString("\n")
sbClient.WriteString("@Client(value = \"INPUT URL\")\n")
sbClient.WriteString("interface GDSClient {\n\n")
for path, methods := range config.Paths {
for method, v := range methods {
sbClient.WriteString(fmt.Sprintf("\t@%s(value = \"%s\")\n", toMicronautKotlinMethod(method), path))
sbClient.WriteString(fmt.Sprintf("\tfun %s(\n", v.OperationID))
pathKeys := getSortKeys(config.Paths)
for _, path := range pathKeys {
methods := config.Paths[path]
methodKeys := getSortKeys(methods)
for _, method := range methodKeys {
v := methods[method]
if v.Summary != "" {
sbClient.WriteString(fmt.Sprintf("\t// %s\n", v.Summary))
}
sbClient.WriteString(fmt.Sprintf("\t@%s(value = \"%s\")\n", toMicronautKotlinMethod(method), path))
sbClient.WriteString(fmt.Sprintf("\tfun %s(", v.OperationID))
if len(v.Parameters) != 0 || v.RequestBody != nil {
sbClient.WriteString("\n")
}
for _, p := range v.Parameters {
sbClient.WriteString("\t\t")
switch p.In {
@ -139,12 +152,20 @@ func toMicronautKotlin(config *config) map[string]string {
}
sbClient.WriteString(fmt.Sprintf(" %s: %s,\n", p.Name, p.Schema.toKt()))
}
// todo body and test
if v.RequestBody != nil {
sbClient.WriteString(fmt.Sprintf("\t\t@Body %s: %s,\n", "body", v.RequestBody.Content.ApplicationJSON.Schema.toKt()))
}
if len(v.Parameters) != 0 || v.RequestBody != nil {
sbClient.WriteString("\t")
sbClient.WriteString(fmt.Sprintf("): HttpResponse<%s>\n", v.Responses.Num200.Content.ApplicationJSON.Schema.toKt()))
sbClient.WriteString("\n")
}
sbClient.WriteString(")")
resp := v.Responses.Num200.Content.ApplicationJSON.Schema.toKt()
if resp != "" {
sbClient.WriteString(fmt.Sprintf(": HttpResponse<%s>", resp))
}
sbClient.WriteString("\n\n")
}
}
sbClient.WriteString("}\n\n")
@ -189,3 +210,12 @@ func refToName(ref string) string {
arr := strings.Split(ref, "/")
return arr[len(arr)-1]
}
func getSortKeys[T any](m map[string]T) []string {
keys := make([]string, 0, len(m))
for k := range m {
keys = append(keys, k)
}
sort.Strings(keys)
return keys
}

202
models.kt
View File

@ -1,202 +0,0 @@
package models
data class CountryAVS(
var id: String?,
var name: String?,
)
data class IdentifierDocumentAVS(
var number: String,
var series: String?,
var type: DocTypeAVS,
)
data class SessionAVS(
var id: String,
)
data class RegionAVS(
var name: String?,
var type: String?,
var country: CountryAVS?,
var id: String?,
)
data class Settings(
var defaultPlaceId: String,
var defaultStationId: String,
)
data class AreaAVS(
var name: String?,
var type: String?,
var id: String?,
)
data class AuthRequest(
var username: String,
var password: String,
var ws: String,
)
data class PassengerAVS(
var passenger: PassengerPartPassengerAVS,
var identifierDocument: IdentifierDocumentAVS,
var benefitDocument: BenefitDocumentAVS?,
var categoryId: Int,
)
data class PassengerPartPassengerAVS(
var citizenship: CitizenshipAVS,
var docNum: String?,
var docSeries: String?,
var docTypeId: String?,
var gender: String,
var birthDate: String?,
var id: Int?,
var lastName: String,
var middleName: String?,
var phone: String?,
var firstName: String,
)
data class TicketCategoryAVS(
var requiredDocTypes: List<DocumentTypeAVS>?,
var id: String,
var name: String,
var price: Double,
)
data class TicketTypeAVS(
var id: String,
var name: String,
var requiredDocTypes: List<RequiredDocTypeAVS>?,
)
data class PlaceAVS(
var region: RegionAVS?,
var area: AreaAVS?,
var id: String?,
var name: String?,
var type: String?,
)
data class StationAVS(
var id: String?,
var name: String?,
var shortName: String?,
var address: String?,
)
data class BusSeatAVS(
var id: String,
var name: String,
var num: Int,
)
data class DeparturesKassa(
var arrivals: List<ArrivalsAVS>,
var place: PlaceAVS?,
var station: StationAVS?,
var time: String?,
var tripId: String?,
var priceText: String,
)
data class DocTypeAVS(
var id: String,
var name: String,
)
data class AuthDTO(
var token: String?,
var refreshToken: String?,
var expireAt: Int?,
)
data class OrderAVS(
var orderId: Int,
var tickets: List<TicketAVS>,
var expirationTime: String?,
var confirmError: String?,
)
data class CitizenshipAVS(
var id: String,
var name: String,
)
data class CountryCode(
var name: String,
var code: String,
)
data class RequiredDocTypeAVS(
var id: String,
var name: String,
)
data class TicketAVS(
var category: TicketCategoryAVS?,
var number: String?,
var passenger: PassengerPartPassengerAVS?,
var seat: BusSeatAVS?,
var series: String?,
var ticketClass: String,
var benefitDocument: BenefitDocumentAVS?,
var id: String,
var identifierDocument: IdentifierDocumentAVS?,
var payments: List<TicketPaymentAVS>?,
var status: String,
)
data class TripKassa(
var bus: BusAVS?,
var seatsText: String,
var carrier: CarrierAVS?,
var changeSeatAllow: Boolean?,
var departures: List<DeparturesKassa>,
var name: String?,
)
data class BenefitDocumentAVS(
var issuer: String?,
var number: String,
var series: String?,
var type: DocTypeAVS,
var beginDate: String?,
var endDate: String?,
var issueDate: String?,
)
data class BusAVS(
var capacity: Int?,
var freeSeats: Int?,
var info: String?,
)
data class CarrierAVS(
var inn: String?,
var name: String?,
)
data class ArrivalsAVS(
var price: Int?,
var station: StationAVS?,
var time: String?,
)
data class DocumentTypeAVS(
var id: String,
var name: String,
)
data class TicketPaymentAVS(
var amount: Double,
var from: String?,
var group: String,
var id: String,
var name: String,
var nds: String,
)