Veikedo

tst service angular

Feb 13th, 2018
222
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 4.62 KB | None | 0 0
  1. ${
  2.     using Typewriter.Extensions.WebApi;
  3.  using System.IO;
  4.  using File = Typewriter.CodeModel.File;
  5.  
  6.  const string ApiNamespace = "OneInc.PolicyOne.HtmlFrontend.ClientApi";
  7.  
  8.     string ServiceName(Class c) => c.Name.Replace("Controller", "Service");
  9.  
  10.  string FilePath(File f)
  11.  {
  12.   var @class = f.Classes.Single();
  13.   var serviceName = ServiceName(@class);
  14.   var fileName = ModuleName(@class) + "_" + Path.ChangeExtension(serviceName, "ts");
  15.  
  16.   var path = fileName;
  17.   return path;
  18.  }
  19.  
  20.     Template(Settings settings)
  21.     {
  22.         settings.OutputFilenameFactory = FilePath;
  23.     }
  24.  
  25.  bool BelongsToClientApi(string @namespace) => @namespace.StartsWith(ApiNamespace) && !@namespace.Contains("CodeGenerationSupport");
  26.  bool BelongsToClientApi(Class @class) => BelongsToClientApi(@class.Namespace) && !@class.Attributes.Any(a => a.Name == "ClientRefIgnore");
  27.     bool BelongsToClientApi(Method @method) => !@method.Attributes.Any(a => a.Name == "ClientRefIgnore");
  28.  bool BelongsToClientApi(Type t) => BelongsToClientApi(t.Namespace);
  29.  
  30.  bool IsController(Class @class)
  31.  {
  32.         var parentClass = @class.BaseClass;
  33.         if (parentClass != null)
  34.         {
  35.            if (parentClass.Name == "Controller")
  36.            {
  37.               return true;
  38.            }
  39.            else
  40.            {
  41.               return IsController(parentClass);
  42.            }
  43.         }
  44.  
  45.         return false;
  46.  }
  47.  
  48.     bool IsVoid(Method method) => method.Type.Name == "void";
  49.  
  50.     bool IsString(Method method) => method.Type.Name == "string";
  51.  
  52.     bool NeedRequestData(Method method) => HttpMethodExtensions.HttpMethod(method) == "post" || method.RequestData() != "null";
  53.  
  54.  string ModuleName(string @namespace)
  55.     {
  56.         var relativeNamespace = @namespace.Replace(ApiNamespace, "").Remove(0, 1);
  57.         return relativeNamespace.Split(new [] {"."}, StringSplitOptions.None).First();
  58.     }
  59.  
  60.  string ModuleName(Class @class) => ModuleName(@class.Namespace);
  61.  string ModuleName(Type t) => ModuleName(t.Namespace);
  62.  
  63.     IEnumerable<Type> ImportedTypes(Class c) => c.Methods
  64.         .Where(m => BelongsToClientApi(m))
  65.         .SelectMany(m => m.Parameters.Select(p => p.Type).Union(new [] { m.Type }))
  66.         .Select(t => UnwrapCollections(t))
  67.         .GroupBy(t => t.FullName)
  68.         .Select(g => g.First())
  69.         .Where(t => BelongsToClientApi(t));
  70.     bool AnyMethodNeedRequestData(Class c) => c.Methods.Any(m => NeedRequestData(m));
  71.  
  72.  Type UnwrapCollections(Type t)
  73.  {
  74.   if(!t.IsGeneric) return t;
  75.   if(!t.IsEnumerable) return t;
  76.  
  77.   var itemType = t.TypeArguments.Single();
  78.   return itemType;
  79.  }
  80.  
  81.     string ProduceTargetTypeName(Type t)
  82.     {
  83.         if(t == "Date")
  84.         {
  85.             return "string";
  86.         }
  87.  
  88.         return t.Name;
  89.     }
  90.  
  91.  string RewrittenTypeName(Type t)
  92.  {
  93.   var unwrappedType = UnwrapCollections(t);
  94.   var hasUnwrapped = unwrappedType != t;
  95.  
  96.         var targetTypeName = ProduceTargetTypeName(unwrappedType);
  97.   return hasUnwrapped ? targetTypeName + "[]" : targetTypeName;
  98.  }
  99.  
  100.  string RewrittenTypeName(Parameter p) => RewrittenTypeName(p.Type);
  101.  string RewrittenTypeName(Method m) => RewrittenTypeName(m.Type);
  102. }$Classes(c => BelongsToClientApi(c) && IsController(c))[// ! Generated Code !
  103.  
  104. import {Http, Response, Headers, RequestOptions} from "@angular/http";
  105. import {Injectable} from "@angular/core";
  106. import {Observable} from "rxjs/Rx";
  107. import {ErrorService} from "../infrastructure/ErrorService/ErrorService";
  108. import {ServerError} from "../infrastructure/ErrorService/ServerError";
  109. $ImportedTypes[import {$Name} from "./$ModuleName_$Name";
  110. ]
  111. @Injectable()
  112. export class $ServiceName {
  113.  constructor(private http: Http, private _errorService: ErrorService) {
  114.  }$Methods(m => BelongsToClientApi(m))[
  115.  
  116.  public $name($Parameters[$name: $RewrittenTypeName][, ]):Observable<$IsVoid[any][$RewrittenTypeName]> {
  117.         let headers = new Headers({
  118.             'X-Requested-With': 'XMLHttpRequest'
  119.         });$NeedRequestData[
  120.         headers.append('Content-Type', 'application/json');]
  121.         const options = new RequestOptions({ headers: headers });
  122.      return this.http.$HttpMethod(`$Url`$NeedRequestData[, JSON.stringify($RequestData)], options)
  123.          .map(($IsVoid[_]res:Response) => $IsVoid[null][<$RewrittenTypeName>$IsString[res.text()][(res.text() ? res.json() : null)]])
  124.          .catch((error: Response) => this.handleError(error));
  125.  }]
  126.  
  127.  private handleError (error: Response):Observable<any> {
  128.      const serverError = ServerError.createFromResponse(error);
  129.         this._errorService.handleServerError(serverError);
  130.         return Observable.throw({isServerError: true});
  131.  }
  132. }]
Advertisement
Add Comment
Please, Sign In to add comment