Esempio n. 1
0
        public InfoScreenMutation(
            IAdminRepository admins,
            ILunchplanRepository lunchplans,
            IMealRepository meals,
            IMessageRepository messages
            )
        {
            Name = "Mutation";

            FieldAsync <BooleanGraphType>(
                "createAdmin",
                arguments: new QueryArguments(
                    new QueryArgument <NonNullGraphType <AdminInputType> > {
                Name = "admin"
            }
                    ),
                resolve: async ctx =>
            {
                var input = ctx.GetArgument <Dictionary <string, object> >("admin");
                var admin = new DAL.Entity.Admin
                {
                    Username = (string)input["username"]
                };
                admin.SetPassword((string)input["password"]);

                return(await admins.CreateAdmin(admin));
            }
                );

            FieldAsync <BooleanGraphType>(
                "updateAdmin",
                arguments: new QueryArguments(
                    new QueryArgument <NonNullGraphType <AdminInputType> > {
                Name = "admin"
            }
                    ),
                resolve: async ctx =>
            {
                var input = ctx.GetArgument <Dictionary <string, object> >("admin");
                var admin = new DAL.Entity.Admin
                {
                    Username = (string)input["username"]
                };
                admin.SetPassword((string)input["password"]);

                return(await admins.UpdateAdmin(admin));
            }
                );

            FieldAsync <BooleanGraphType>(
                "deleteAdmin",
                arguments: new QueryArguments(
                    new QueryArgument <NonNullGraphType <StringGraphType> > {
                Name = "admin"
            }
                    ),
                resolve: async ctx =>
            {
                if (ctx.HasArgument("admin"))
                {
                    return(await admins.DeleteAdmin(ctx.GetArgument <string>("admin")));
                }
                return(false);
            });

            FieldAsync <BooleanGraphType>(
                "saveLunchplan",
                arguments: new QueryArguments(
                    new QueryArgument <NonNullGraphType <LunchplanInputType> > {
                Name = "lunchplan"
            }
                    ),
                resolve: async ctx =>
            {
                var arg      = ctx.GetArgument <Dictionary <string, object> >("lunchplan");
                var week     = (int)arg["week"];
                var mp       = (Dictionary <string, object>)arg["mealplan"];
                var mealplan = new Dictionary <Weekday, int>();
                foreach (var(key, val) in mp)
                {
                    mealplan[Enum.Parse <Weekday>(key, true)] = (int)val;
                }

                var lunchplan = new Lunchplan
                {
                    WeekNumber = week,
                    Mealplan   = mealplan
                };

                return(await lunchplans.SaveLunchplan(lunchplan));
            }
                );

            FieldAsync <BooleanGraphType>(
                "createMeal",
                arguments: new QueryArguments(
                    new QueryArgument <NonNullGraphType <MealInputType> > {
                Name = "meal"
            }
                    ),
                resolve: async ctx =>
            {
                var meal = ctx.GetArgument <Meal>("meal");
                return(await meals.CreateMeal(meal));
            }
                );

            FieldAsync <BooleanGraphType>(
                "createMessage",
                arguments: new QueryArguments(
                    new QueryArgument <NonNullGraphType <MessageInputType> > {
                Name = "message"
            }
                    ),
                resolve: async ctx =>
            {
                var message       = ctx.GetArgument <Message>("message");
                message.Date      = DateTime.Now;
                message.CreatedBy = ctx.UserContext.As <InfoScreenUserContext>().AdminId;
                return(await messages.CreateMessage(message));
            }
                );
        }
        public InfoScreenQuery(
            ILunchplanRepository lunchplans,
            IMealRepository meals,
            IMessageRepository messages,
            IAdminRepository admins
            )
        {
            Name = "Query";

            FieldAsync <AdminType>(
                "admin",
                arguments: new QueryArguments(
                    new QueryArgument <IntGraphType> {
                Name = "id"
            },
                    new QueryArgument <StringGraphType> {
                Name = "username"
            }
                    ),
                resolve: async ctx =>
            {
                if (ctx.HasArgument("id"))
                {
                    return(await admins.GetAdmin(ctx.GetArgument <int>("id")));
                }
                if (ctx.HasArgument("username"))
                {
                    return(await admins.FindByUsername(ctx.GetArgument <string>("username")));
                }
                return(null);
            }
                );

            FieldAsync <LunchplanType>(
                "lunchplan",
                arguments: new QueryArguments(
                    new QueryArgument <IntGraphType> {
                Name = "week"
            }
                    ),
                resolve: async ctx =>
            {
                if (ctx.HasArgument("week"))
                {
                    return(await lunchplans.GetLunchplan(ctx.GetArgument <int>("week")));
                }
                return(null);
            }
                );

            FieldAsync <MealType>(
                "meal",
                arguments: new QueryArguments(
                    new QueryArgument <IntGraphType> {
                Name = "id"
            }
                    ),
                resolve: async ctx =>
            {
                if (ctx.HasArgument("id"))
                {
                    return(await meals.GetMeal(ctx.GetArgument <int>("id")));
                }
                return(null);
            }
                );

            FieldAsync <ListGraphType <MealType> >(
                "meals",
                resolve: async ctx => await meals.ListMeals()
                );

            FieldAsync <MessageType>(
                "message",
                arguments: new QueryArguments(
                    new QueryArgument <IntGraphType> {
                Name = "id"
            }
                    ),
                resolve: async ctx =>
            {
                if (ctx.HasArgument("id"))
                {
                    return(await messages.GetMessage(ctx.GetArgument <int>("id")));
                }
                return(null);
            }
                );

            FieldAsync <ListGraphType <MessageType> >(
                "messages",
                resolve: async ctx => await messages.ListMessages()
                );

            FieldAsync <MessageType>(
                "newestMessage",
                resolve: async ctx => await messages.GetNewestMessage()
                );
        }