Skip to content
This repository has been archived by the owner on Dec 16, 2024. It is now read-only.

Commit

Permalink
fix: code gen with latest ftl updates (#13)
Browse files Browse the repository at this point in the history
  • Loading branch information
wesbillman authored Jan 18, 2024
1 parent 2f8fffc commit 0e49c9d
Show file tree
Hide file tree
Showing 15 changed files with 326 additions and 15 deletions.
3 changes: 2 additions & 1 deletion frontend/mobile/lib/api/ad.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
library ad;

import 'dart:convert';
import 'dart:typed_data';
import 'ftl_client.dart';


Expand Down Expand Up @@ -61,7 +62,7 @@ class AdResponse {
Map<String, dynamic> toMap() {
return {
'name': ((dynamic v) => v)(name),
'ads': ((dynamic v) => v.map((v) => Ad.fromMap(v)).cast<Ad>().toList())(ads),
'ads': ((dynamic v) => v.map((v) => v.toMap()).cast<Ad>().toList())(ads),
};
}

Expand Down
80 changes: 80 additions & 0 deletions frontend/mobile/lib/api/builtin.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
// ignore_for_file: unused_import
library builtin;

import 'dart:convert';
import 'dart:typed_data';
import 'ftl_client.dart';


class HttpRequest {
String method;
String path;
Map<String, String> pathParameters;
Map<String, List<String>> query;
Map<String, List<String>> headers;
Uint8List body;

HttpRequest({ required this.method, required this.path, required this.pathParameters, required this.query, required this.headers, required this.body, });

Map<String, dynamic> toMap() {
return {
'method': ((dynamic v) => v)(method),
'path': ((dynamic v) => v)(path),
'pathParameters': ((dynamic v) => v.map((k, v) => MapEntry(k, v)).cast<String, String>())(pathParameters),
'query': ((dynamic v) => v.map((k, v) => MapEntry(k, v.map((v) => v).cast<String>().toList())).cast<String, List<String>>())(query),
'headers': ((dynamic v) => v.map((k, v) => MapEntry(k, v.map((v) => v).cast<String>().toList())).cast<String, List<String>>())(headers),
'body': ((dynamic v) => v)(body),
};
}

factory HttpRequest.fromMap(Map<String, dynamic> map) {
return HttpRequest(
method: ((dynamic v) => v)(map['method']),
path: ((dynamic v) => v)(map['path']),
pathParameters: ((dynamic v) => v.map((k, v) => MapEntry(k, v)).cast<String, String>())(map['pathParameters']),
query: ((dynamic v) => v.map((k, v) => MapEntry(k, v.map((v) => v).cast<String>().toList())).cast<String, List<String>>())(map['query']),
headers: ((dynamic v) => v.map((k, v) => MapEntry(k, v.map((v) => v).cast<String>().toList())).cast<String, List<String>>())(map['headers']),
body: ((dynamic v) => v)(map['body']),
);
}

String toJson() => json.encode(toMap());

factory HttpRequest.fromJson(String source) => HttpRequest.fromMap(json.decode(source));
}

class HttpResponse {
int status;
Map<String, List<String>> headers;
Uint8List body;

HttpResponse({ required this.status, required this.headers, required this.body, });

Map<String, dynamic> toMap() {
return {
'status': ((dynamic v) => v)(status),
'headers': ((dynamic v) => v.map((k, v) => MapEntry(k, v.map((v) => v).cast<String>().toList())).cast<String, List<String>>())(headers),
'body': ((dynamic v) => v)(body),
};
}

factory HttpResponse.fromMap(Map<String, dynamic> map) {
return HttpResponse(
status: ((dynamic v) => v)(map['status']),
headers: ((dynamic v) => v.map((k, v) => MapEntry(k, v.map((v) => v).cast<String>().toList())).cast<String, List<String>>())(map['headers']),
body: ((dynamic v) => v)(map['body']),
);
}

String toJson() => json.encode(toMap());

factory HttpResponse.fromJson(String source) => HttpResponse.fromMap(json.decode(source));
}


class BuiltinClient {
final FTLHttpClient ftlClient;

BuiltinClient({required this.ftlClient});

}
3 changes: 2 additions & 1 deletion frontend/mobile/lib/api/cart.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
library cart;

import 'dart:convert';
import 'dart:typed_data';
import 'ftl_client.dart';


Expand Down Expand Up @@ -105,7 +106,7 @@ class Cart {
Map<String, dynamic> toMap() {
return {
'userID': ((dynamic v) => v)(userID),
'items': ((dynamic v) => v.map((v) => Item.fromMap(v)).cast<Item>().toList())(items),
'items': ((dynamic v) => v.map((v) => v.toMap()).cast<Item>().toList())(items),
};
}

Expand Down
123 changes: 123 additions & 0 deletions frontend/mobile/lib/api/checkout.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,123 @@
// ignore_for_file: unused_import
library checkout;

import 'dart:convert';
import 'dart:typed_data';
import 'ftl_client.dart';
import 'cart.dart' as cart;
import 'currency.dart' as currency;
import 'payment.dart' as payment;
import 'productcatalog.dart' as productcatalog;
import 'shipping.dart' as shipping;


class PlaceOrderRequest {
String userID;
String userCurrency;
shipping.Address address;
String email;
payment.CreditCardInfo creditCard;

PlaceOrderRequest({ required this.userID, required this.userCurrency, required this.address, required this.email, required this.creditCard, });

Map<String, dynamic> toMap() {
return {
'userID': ((dynamic v) => v)(userID),
'userCurrency': ((dynamic v) => v)(userCurrency),
'address': ((dynamic v) => v.toMap())(address),
'email': ((dynamic v) => v)(email),
'creditCard': ((dynamic v) => v.toMap())(creditCard),
};
}

factory PlaceOrderRequest.fromMap(Map<String, dynamic> map) {
return PlaceOrderRequest(
userID: ((dynamic v) => v)(map['userID']),
userCurrency: ((dynamic v) => v)(map['userCurrency']),
address: ((dynamic v) => shipping.Address.fromMap(v))(map['address']),
email: ((dynamic v) => v)(map['email']),
creditCard: ((dynamic v) => payment.CreditCardInfo.fromMap(v))(map['creditCard']),
);
}

String toJson() => json.encode(toMap());

factory PlaceOrderRequest.fromJson(String source) => PlaceOrderRequest.fromMap(json.decode(source));
}

class OrderItem {
cart.Item item;
currency.Money cost;

OrderItem({ required this.item, required this.cost, });

Map<String, dynamic> toMap() {
return {
'item': ((dynamic v) => v.toMap())(item),
'cost': ((dynamic v) => v.toMap())(cost),
};
}

factory OrderItem.fromMap(Map<String, dynamic> map) {
return OrderItem(
item: ((dynamic v) => cart.Item.fromMap(v))(map['item']),
cost: ((dynamic v) => currency.Money.fromMap(v))(map['cost']),
);
}

String toJson() => json.encode(toMap());

factory OrderItem.fromJson(String source) => OrderItem.fromMap(json.decode(source));
}

class Order {
String id;
String shippingTrackingID;
currency.Money shippingCost;
shipping.Address shippingAddress;
List<OrderItem> items;

Order({ required this.id, required this.shippingTrackingID, required this.shippingCost, required this.shippingAddress, required this.items, });

Map<String, dynamic> toMap() {
return {
'id': ((dynamic v) => v)(id),
'shippingTrackingID': ((dynamic v) => v)(shippingTrackingID),
'shippingCost': ((dynamic v) => v.toMap())(shippingCost),
'shippingAddress': ((dynamic v) => v.toMap())(shippingAddress),
'items': ((dynamic v) => v.map((v) => v.toMap()).cast<OrderItem>().toList())(items),
};
}

factory Order.fromMap(Map<String, dynamic> map) {
return Order(
id: ((dynamic v) => v)(map['id']),
shippingTrackingID: ((dynamic v) => v)(map['shippingTrackingID']),
shippingCost: ((dynamic v) => currency.Money.fromMap(v))(map['shippingCost']),
shippingAddress: ((dynamic v) => shipping.Address.fromMap(v))(map['shippingAddress']),
items: ((dynamic v) => v.map((v) => OrderItem.fromMap(v)).cast<OrderItem>().toList())(map['items']),
);
}

String toJson() => json.encode(toMap());

factory Order.fromJson(String source) => Order.fromMap(json.decode(source));
}


class CheckoutClient {
final FTLHttpClient ftlClient;

CheckoutClient({required this.ftlClient});


Future<Order> placeOrder(PlaceOrderRequest request) async {
final response = await ftlClient.post('/checkout/userID', request: request.toMap());
if (response.statusCode == 200) {
return Order.fromJson(response.body);
} else {
throw Exception('Failed to get placeOrder response');
}
}

}
1 change: 1 addition & 0 deletions frontend/mobile/lib/api/currency.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
library currency;

import 'dart:convert';
import 'dart:typed_data';
import 'ftl_client.dart';


Expand Down
1 change: 1 addition & 0 deletions frontend/mobile/lib/api/payment.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
library payment;

import 'dart:convert';
import 'dart:typed_data';
import 'ftl_client.dart';
import 'currency.dart' as currency;

Expand Down
7 changes: 4 additions & 3 deletions frontend/mobile/lib/api/productcatalog.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
library productcatalog;

import 'dart:convert';
import 'dart:typed_data';
import 'ftl_client.dart';
import 'currency.dart' as currency;

Expand Down Expand Up @@ -69,7 +70,7 @@ class ListResponse {

Map<String, dynamic> toMap() {
return {
'products': ((dynamic v) => v.map((v) => Product.fromMap(v)).cast<Product>().toList())(products),
'products': ((dynamic v) => v.map((v) => v.toMap()).cast<Product>().toList())(products),
};
}

Expand Down Expand Up @@ -135,7 +136,7 @@ class SearchResponse {

Map<String, dynamic> toMap() {
return {
'results': ((dynamic v) => v.map((v) => Product.fromMap(v)).cast<Product>().toList())(results),
'results': ((dynamic v) => v.map((v) => v.toMap()).cast<Product>().toList())(results),
};
}

Expand Down Expand Up @@ -167,7 +168,7 @@ class ProductcatalogClient {
}

Future<Product> get(GetRequest request) async {
final response = await ftlClient.get('/productcatalog/${request.id}', requestJson: request.toJson());
final response = await ftlClient.get('/productcatalog/id', requestJson: request.toJson());
if (response.statusCode == 200) {
return Product.fromJson(response.body);
} else {
Expand Down
1 change: 1 addition & 0 deletions frontend/mobile/lib/api/recommendation.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
library recommendation;

import 'dart:convert';
import 'dart:typed_data';
import 'ftl_client.dart';
import 'productcatalog.dart' as productcatalog;

Expand Down
5 changes: 3 additions & 2 deletions frontend/mobile/lib/api/shipping.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,10 @@
library shipping;

import 'dart:convert';
import 'dart:typed_data';
import 'ftl_client.dart';
import 'currency.dart' as currency;
import 'cart.dart' as cart;
import 'currency.dart' as currency;


class Address {
Expand Down Expand Up @@ -50,7 +51,7 @@ class ShippingRequest {
Map<String, dynamic> toMap() {
return {
'address': ((dynamic v) => v.toMap())(address),
'items': ((dynamic v) => v.map((v) => cart.Item.fromMap(v)).cast<cart.Item>().toList())(items),
'items': ((dynamic v) => v.map((v) => v.toMap()).cast<cart.Item>().toList())(items),
};
}

Expand Down
10 changes: 6 additions & 4 deletions frontend/mobile/templates/template.js
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,9 @@ function dartType(t) {

case "Array":
return `List<${dartType(t.element)}>`;

case "Bytes":
return `Uint8List`;

case "VerbRef":
case "DataRef":
Expand Down Expand Up @@ -57,10 +60,10 @@ function deserialize(t) {
function serialize(t) {
switch (typename(t)) {
case "Array":
return `v.map((v) => ${deserialize(t.element)}).cast<${dartType(t.element)}>().toList()`;
return `v.map((v) => ${serialize(t.element)}).cast<${dartType(t.element)}>().toList()`;

case "Map":
return `v.map((k, v) => MapEntry(k, ${deserialize(t.value)})).cast<${dartType(t.key)}, ${dartType(t.value)}>()`;
return `v.map((k, v) => MapEntry(k, ${serialize(t.value)})).cast<${dartType(t.key)}, ${dartType(t.value)}>()`;

case "DataRef":
return "v.toMap()";
Expand All @@ -71,8 +74,7 @@ function serialize(t) {
}

function url(verb) {
let path = verb.metadata[0].path;
const method = verb.metadata[0].method;
let path = '/' + verb.metadata[0].path.join("/");

return path.replace(/{(.*?)}/g, (match, fieldName) => {
return "$" + `{request.${fieldName}}`;
Expand Down
1 change: 1 addition & 0 deletions frontend/mobile/templates/{{ .Name | lower }}.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
library {{ .Name | lower }};

import 'dart:convert';
import 'dart:typed_data';
import 'ftl_client.dart';
{{- range .Imports }}
import '{{. | lower }}.dart' as {{. | lower}};
Expand Down
34 changes: 34 additions & 0 deletions frontend/web/src/api/builtin.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-nocheck
// eslint-disable @typescript-eslint/no-unused-vars
//
// Automatically generated by
// ____________
// / __/_ __/ /
// / _/ / / / /__
// /_/ /_/ /____/
//
//
export interface HttpRequest {
method: string;
path: string;
pathParameters: Map<string, string>;
query: Map<string, string[]>;
headers: Map<string, string[]>;
body: Uint8Array;
}

export interface HttpResponse {
status: number;
headers: Map<string, string[]>;
body: Uint8Array;
}


export class BuiltinClient {
private baseUrl: string;

constructor(baseUrl: string) {
this.baseUrl = baseUrl;
}
}
Loading

0 comments on commit 0e49c9d

Please sign in to comment.