Esempio n. 1
0
        /// <summary>
        /// Discovers schemas located in the users Zoho CRM instance
        /// </summary>
        /// <param name="request"></param>
        /// <param name="context"></param>
        /// <returns>Discovered schemas</returns>
        public override async Task <DiscoverSchemasResponse> DiscoverSchemas(DiscoverSchemasRequest request,
                                                                             ServerCallContext context)
        {
            try
            {
                Logger.SetLogPrefix("discover");
                Logger.Info("Discovering Schemas...");

                DiscoverSchemasResponse discoverSchemasResponse = new DiscoverSchemasResponse();

                discoverSchemasResponse.Schemas.AddRange(await Discover.GetAllSchemas(_client));
                discoverSchemasResponse.Schemas.AddRange(
                    await Discover.GetAllCustomSchemas(_client, _server.Settings.CustomSchemaList));

                Logger.Info($"Schemas found: {discoverSchemasResponse.Schemas.Count}");

                // only return requested schemas if refresh mode selected
                if (request.Mode == DiscoverSchemasRequest.Types.Mode.Refresh)
                {
                    var refreshSchemas = request.ToRefresh;
                    var schemas        =
                        JsonConvert.DeserializeObject <Schema[]>(
                            JsonConvert.SerializeObject(discoverSchemasResponse.Schemas));
                    discoverSchemasResponse.Schemas.Clear();
                    discoverSchemasResponse.Schemas.AddRange(schemas.Join(refreshSchemas, schema => schema.Id,
                                                                          refreshSchema => refreshSchema.Id,
                                                                          (schema, refresh) => schema));

                    Logger.Debug($"Refresh requested on schemas: {JsonConvert.SerializeObject(refreshSchemas)}");

                    Logger.Info($"Schemas returned: {discoverSchemasResponse.Schemas.Count}");
                    return(discoverSchemasResponse);
                }

                // return all schemas otherwise
                Logger.Info($"Schemas returned: {discoverSchemasResponse.Schemas.Count}");
                return(discoverSchemasResponse);
            }
            catch (Exception e)
            {
                Logger.Error(e, e.Message, context);
                return(new DiscoverSchemasResponse());
            }
        }